Redis缓存失效以及解决方案

一、缓存穿透

缓存穿透是指缓存和数据库中都没有数据,用户不断请求不到数据,这时请求就越过redis直接访问数据库,造成数据库访问量压力过大

解决方案:

缓存空对象

过滤器(布隆)

mvc拦截

二、缓存雪崩

缓存雪崩就是在设置缓存的时候,redis中的key设置了相同的过期时间,导致缓存在某一时间同时失效了,请求全部访问数据库,造成数据库压力过大,导致雪崩

解决方案

将缓存数据的过期时间设置为随机,防止同一时间大量数据过期

分布式部署的情况下,将热点数据均匀分布在不同的缓存数据库中

设置热点数据永不过期

出现雪崩进行服务降级,熔断

三、缓存击穿

  1. 缓存击穿和缓存雪崩的区别

缓存击穿是指并发查同一条数据,指的是缓存中没有数据,但是数据库中有数据。这是由于并发用户特别多,同时读缓存没有读取到数据,又同时去数据库查询,引起数据库压力瞬间增大

缓存雪崩是不同的数据都过期了,很多数据都查不到从而查数据库

解决方案

设置热点数据永不过期

加锁,比较常用的做法是mutex(互斥锁),在缓存失效的时候,不立即去读取数据库,而是先试用缓存工具的某些带成功操作返回值的操作

加synchronized(this)锁的问题

会造成时序问题

时序问题:之前的逻辑是查缓存没有然后竞争锁查数据库,这样就会造成多次查库

加synchronized(this)的解决方案

竞争到锁之后,再次确认缓存中有没有,再去查数据库

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值