一、缓存穿透
去缓存层没有查到数据,而去数据库中查找数据。
注意:不能避免低频的缓存穿透,可以避免高频的缓存穿透。
二、缓存雪崩
缓存层的数据,在某一时刻突然失效(无法访问),导致大量的请求跑到数据库。
导致原因:
(1)redis中缓存的数据有效期是一致的。
解决办法:给每一条数据加上一个随机有效期,不要突然同时失效。
(2)redis数据库挂掉了
解决办法:分布式缓存
三、Redis集群的Hash一致性算法:
解决redie集群中再添加redis数据库的数据存储问题。
三、缓存击穿
当缓存层(redis)只缓存了1条数据时,当用户大量的请求过来时,刚好这条数据失效。
解决办法:分布式锁(基于mysql或者基于Zookeeper)
四、布隆算法
通过一定的错误率换取空间,错误率是由于存在hash碰撞导致的,降低错误率的方法:1.加大数组的长度,2.增加hash函数的个数(并不是hash函数越多越好,要参考数组的长度)。
hash错误率:(1)布隆算法返回数据存在,则有可以数据实际不存在。(2)布隆算法返回数据不存在,则数据一定不存在。