Redis——缓存穿透,缓存击穿与缓存雪崩

缓存穿透

解释:
当一个请求访问的数据不存在于缓存中时,会直接向底层数据库中读取数据。而如果底层的数据库也没有该数据,则该数据不会被写入缓存中。如果下次继续有请求访问到该数据时,缓存中还是没有,还是会访问底层数据库。如果访问的量很大,底层数据库可能会很容易嗝屁。

缓存穿透
解决办法:
1)缓存设置空值
当请求访问的数据在缓存与数据库中都没有 key 时,就设置一个空值数据写入缓存,并为该数据设置一个较短的过期时间。这样子如果后续有大量请求访问到该数据时,就不会在去查询底层的数据库。
2)布隆过滤器
采用布隆过滤器判断数据是否存在。
布隆过滤器原理:
通过K个散列函数将一个元素映射成一个位数组中的K个点,把它们置为1。 当有请求需要访问某个数据元素时,会对该元素也进行映射并检索,如果有一个位置上不为1则一定不存在于该集合, 若都为1则可能存在于该集合。

缓存击穿

解释:
当大量请求要访问到某个数据时, 该数据刚好过期 这时所有请求都会去访问更底层的数据库。 如果访问的量很大,底层数据库可能会很容易嗝屁。

缓存击穿
解决办法:
1)加互斥锁
在多个请求中, 只有第一个请求线程能拿到锁并执行数据库的查询查询操作,其他请求线程都会被阻塞。 (第一个请求线程会因为缓存中没有需要查询的数据而去更底层的数据库中进行查询)等到第一个请求线程在跟底层的数据库中查询到数据时,数据会被写入到缓存中,这时后续的请求就可以直接访问到缓存中的数据。
2)热点数据永不过期处理
被访问次数非常多的数据 在缓存中做永远不会过期的处理。

缓存雪崩

解释:
当大量请求访问到多个多个不同的热点数据时,这些数据刚刚好过期被清除 这是所有请求都会去访问更底层的数据库。 如果访问的量很大,底层数据库可能会很容易嗝屁。和缓存击穿有点像,类似于加大码的缓存击穿。
缓存雪崩
解决办法:
1)热点数据永不过期处理。
同“缓存击穿”里的方法一致。
2)加互斥锁。
同上“缓存击穿”里的一致。
3)缓存时间均匀分布
将缓存数据的过期时间均匀的分布, 尽量避免多个缓存在同一时间过期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值