redis缓存穿透/击穿/雪崩及解决办法
2020-11-18 12:06:26 0 举报
解释redis缓存击穿/穿透/雪崩相关概念,并提供解决办法
作者其他创作
大纲/内容
解决办法1. 对key 设置不同对失效时间,避免大量对key同时失效2. 缓存预热。在系统启动时,先将数据加入到redis中预热。保证在数据使用之前已经加入到了缓存中。3. 通过加锁对方式来限流,减轻数据库压力
穿透
请求
击穿
数据库
类似这样的key都会直击穿透redis,到达数据库
数据库返回数据,缓存到redis
雪崩
查询key对应的redis数据
redis中此数据刚好失效,则去数据库中查
数据库中查询到的数据返回之前,请求直接访问数据库
redis
大量的key失效
数据库中也没有,则返回空。redis中也不会缓存
redis中大量的key失效,对这些key对访问则去数据库中查
redis中没有,则去数据库中查
缓存穿透
解决办法1. 加锁,在未命中缓存时,通过加锁避免大量请求访问数据库2. 不允许过期。物理不过期,也就是不设置过期时间。而是逻辑上定时在后台异步的更新数据。3. 采用二级缓存。L1缓存失效时间短,L2缓存失效时间长。请求优先从L1缓存获取数据,如果未命中,则加锁,保证只有一个线程去数据库中读取数据然后再更新到L1和L2中。然后其他线程依然在L2缓存获取数据。
缓存击穿
解决办法1. 数据库查询后,如果没有查到的话,也在redis中缓存一些,缓存内容为空或者默认值即可。保证不会大量请求访问数据库。2. 使用布隆过滤器。将可能的结果存在布隆过滤器中,查询之前可以先查下布隆过滤器,如果查不到,可以确定数据不存在。避免了对redis和数据库的查询。
对这些key的请求,都直接作用到mysql
缓存雪崩
数据返回
0 条评论
回复 删除
下一页