- 频繁修改的数据:数据的读写比在2:1以上,即写入一次缓存,在数据更新前至少读取2次以上,缓存才有意义。
- 没有热点的访问:若应用系统访问数没有热点,不遵循二八定律,那么缓存就没有意义,因大部分数据还没被再次访问就被挤出缓存了。
- 数据不一致与脏读:一般对缓存的数据设置失效时间,一旦超过失效时间,就从数据库中重新加载,应用要容忍一定时间的数据不一致,这种延迟时可以被接受的,但具体应用需慎重对待。
- 缓存可用性:缓存时为了提高数据读取性能,缓存数据对视或者缓存不可用不会影响到应用程序的处理,它可以从数据库直接获取数据,但随者业务发展,缓存会承担大部分数据访问的压力,当缓存服务崩溃时,数据库会承受不住压力而宕机。通过分布式缓存服务集群,将缓存数据分布到集群多台服务器上可在一定程度上改善缓存性能。当一台缓存服务器宕机的时候,只有部分缓存数据丢失,重新从数据库加载这部分数据不会对数据库产生很大影响。
- 缓存预热:缓存中存放的是热点数据,热点数据又是缓存系统利用LRU(最近醉酒未用算法)。新启动的缓存系统,在重建缓存数据过程中加载好热点数据。
- 缓存穿透:如果因为不恰当的业务或恶意攻击,持续高并发请求某个不存在的数据,由于缓存没有保存该数据,所有请求会落在数据库上,会对数据库造成很大压力,甚至崩溃。对策是将不存在的数据缓存起来,其值为null