redis缓存失效、竞争加载引发的性能问题

redis缓存失效时,众所周知,如果不做保护自己放任请求去并发重新加载缓存,会导致大量请求直接打到数据库上,即出现缓存击穿问题。

项目组为了解决这个问题,使用了竞争获取锁刷新缓存的方式,应对缓存失效。

比如A B两个请求到达,在redis进行锁竞争,获取锁的线程开始查表刷缓存。获取不到锁的线程则开始通过循环sleep的方式,查询缓存是否刷新完毕,如果循环等待时间超过一定1秒,就放弃。

这样看起来很完美,实际上引起了Redis的性能问题

生产环境中,发现redis 的请求延迟和请求量均在2小时左右周期性出现波峰。

 生产环境的服务器数量大概在两百台左右,对单key对象的接口请求qps大概峰值在1万,重新加载缓存需要的实际并不短,假如超过了1秒,理论上会带来10000*20的redis单key qps,已经超过了redis的单节点性能上线。

这个问题的启发:不要在请求中去把请求量放大。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值