Redis中缓存相关的总结
1.缓存穿透


缓存穿透指的是查询一个一定不存在的数据时,由于存储层查不到数据因此不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能会导致 DB 挂掉。在这种情况大概率是遭到了攻击。解决方案的话,我们通常都会用布隆过滤器来解决它。那么什么是布隆过滤器呢?

布隆过滤器主要是用于检索一个元素是否在一个集合中。它的底层原理是,先初始化一个比较大的数组,里面存放的是二进制0或1。一开始都是0,当一个key来了之后,经过3次hash计算,在模数组长度找到数据的下标,然后把数组中原来的0改为1。这样,三个数组的位置就能标明一个key的存在。查找的过程也是一样的。当然,布隆过滤器有可能会产生一定的误判,因为不同的ket可能会计算出相同的位置,一般数组长度越小越容易出现覆盖。我们一般可以设置这个误判率,大概不会超过5%。其实这个误判是必然存在的,要不就得增加数组的长度。5%以内的误判率一般的项目也能接受,不至于高并发下压倒数据库。
2.缓存击穿

缓存击穿指的是对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这个时间点对这个Key有大量的并发请求过来。这些请求发现缓存过期,一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把 DB 压垮。


3.缓存雪崩

缓存雪崩指的是设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重而雪崩。与缓存击穿的区别是:雪崩是很多key,而击穿是某一个key缓存。解决方案主要是,可以将缓存失效时间分散开。比如,可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机。这样,每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。
最后,可以来一个视频中的总结。
很难引发集体失效的事件。
最后,可以来一个视频中的总结。
