什么是Redis雪崩,穿透,击穿?有什么解决办法_java自学_java相关资讯_成都java培训机构

什么是Redis雪崩,穿透,击穿?有什么解决办法

  • 作者:创始人
  • 发表时间:2021-11-23 10:00:24

关于Redis雪崩,穿透,击穿你是怎么理解呢?一百个读者就有一百个哈姆雷特。一起来看看什么是redis雪崩,穿透,击穿,有什么解决办法。

Redis 雪崩:

雪崩就是指缓存中大批量热点数据过期后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。

解决办法:

1.将缓存失效时间分散开,比如每个key的过期时间是随机,防止同一时间大量数据过期现象发生,这样不会出现同一时间全部请求都落在数据库层,如果缓存数据库是分布式部署,将热点数据均匀分布在不同Redis和数据库中,有效分担压力,别一个人扛。

什么是Redis雪崩,穿透,击穿

Redis 穿透:

穿透是指绕过Reids,调用者发起的请求参数(key)在缓存和数据库中都不存在,通过不存在的key,成功穿透到系统底层,大规模不断发起不存在的key检索请求导致系统压力过大最后故障。

解决办法:

1.分布式布隆过滤器:布隆是BloomFilter音译过来的,Redis 自身支持BloomFilter

2.返回空值:遇到数据库和Redis都查询不到的值,在Redisset一个null value,过期时间很短,目的在于同一个key再次请求时直接返回null,避免穿透。

Redis 击穿

击穿和穿透概念类似,一般是指一个key被穿透,这个key是热点key,同一个key会被有成千上万次请求,比如微博热点排行榜,key是小时时间戳,value是个list的榜单。每个小时产生一个key,这个key会有百万QPS,如果这个key失效了,就像保险丝熔断,百万QPS直接压垮数据库。

解决办法:

业界比较常用的做法,是使用mutex。简单地来说,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如RedisSETNX或者MemcacheADD)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;否则,就重试整个get缓存的方法。

什么是Redis雪崩,穿透,击穿?有什么解决办法?关注成都Java培训机构,带你了解更多Java相关问题。