介绍

缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。

这里需要注意和缓存击穿的区别,缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。

击穿分为两种情况,一种是雪崩集体失效,一种是无效访问。而正常情况下的击穿无需考虑
缓存雪崩一般是设置时过期时间添加一个随机数,如原本是30min,可以随机多1-5分钟

解决方法

  1. 缓存的有效时间加点随机值,散落失效时间
  2. 热点数据访问db时加锁,获得锁后再去判断下缓存是否存在
  3. 基于redis or zookeeper实现互斥锁,等待第一个请求构建完缓存之后,再释放锁,进而其它请求才能通过该key访问数据
  4. 也可以将热点数据设置永远不过期
  5. 空值和部分不在缓存的数据也要加入缓存,设置适中的缓存时间
    缓存空对象


本文作者: 博主:    文章标题:如何解决 Redis 内存击穿
本文地址:https://teamep.cn/154.html     
版权说明:若无注明,本文皆为“指间”原创,转载请保留文章出处。
最后修改:2020 年 09 月 29 日 02 : 59 PM
如果觉得我的文章对你有用,请随意赞赏