缓存雪崩,缓存穿透
程序员文章站
2022-03-08 22:24:04
缓存雪崩含义:redis中大量的热点数据,同时过期了(失效了)。是因为每个key都设置了相同的过去时间expire。如果这个时候并发访问量特别大,所有的请求都会落到数据库层面,给db造成特别大的压力。解决方式:设置过期时间的时候 增加一个 random随机数热点数据不会变化,永远不会去db请求,可以永久不过期预更新(定时扫描即将过期的数据 )。。。缓存穿透含义:查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询,发现也没有,......
缓存雪崩
含义:
redis中大量的热点数据,同时过期了(失效了)。是因为每个key都设置了相同的过去时间expire。如果这个时候并发访问量特别大,所有的请求都会落到数据库层面,给db造成特别大的压力。
解决方式:
- 设置过期时间的时候 增加一个 random随机数
- 如果热点数据不会变化,可以不设置过期时间,也就是说永远不会去db请求
- 预更新(定时扫描即将过期的数据 )
- 。。。
缓存穿透
含义:
查询一个数据,发现redis缓存没有命中,于是向持久层数据库查询,发现也没有,说明本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透
解决方式:
- 1.布隆过滤器
解决在海量元素中快速判断一个元素是否存在。例如100亿随机数无序,不定长,不重复,判断34432这个数是否在这100亿个随机数中存在。虽然会有误差率,但是一般准确率会打到97% 左右,大大减少了穿透的次数。
- 特点
- 如果布隆过滤器判断元素在集合中存在,不一定存在(因为会发生hash碰撞,得到的结果会有误差)
- 如果布隆过滤器判断元素在集合中不存在,一定不存在
- 如果元素实际存在,布隆过滤器判断一定存在
- 如果元素实际不存在,布隆过滤器判断可能存在
- 2.没有请求到数据也要添加到redis中,设置为null,并且设置过期时间保证数据一致性
本文地址:https://blog.csdn.net/as875784622/article/details/107312264