Redis击穿和穿透怎么理解?两种场景有什么区别?_java自学_java相关资讯_成都java培训机构

Redis击穿和穿透怎么理解?两种场景有什么区别?

  • 作者:创始人
  • 发表时间:2021-11-22 09:47:49

关于Redis雪崩,穿透,击穿的问题,第一次接触名字有点陌生,听上去还比较相似,难以理解。今天来看看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

Redis 穿透:

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

解决办法:

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

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

Redis击穿和穿透怎么理解?两种场景有什么区别?关注成都Java培训机构,带你了解更多Java相关问题。