Redis-问题-缓存击穿

1,问题描述 

  1)数据库访问压力瞬时增加

  2)redis 里面并没有出现大量的key过期

  3)redis运行正常

 

 

2,问题原因

  redis里面的某个key 过期了,大量访问使用这个key

 

3,解决方案

  key可能会在某个时间点被超高并发的访问,是一种非常“ 热点 ”的数据,这个时候需要考虑一个问题:缓存被“ 击穿 ” 的问题,

       1)预先设置热门数据:在redis访问高峰之前,把一些热门数据提前存入到redis 里面,加大这些热门数据key 的时长。

    2)适时调整:现场监控哪些key 热门,适时调整 key 的过期时长

    3)使用锁

      1,就是在缓存失效的时候 (判断拿出来的值为空),不立即去 load  db,

      2,先使用缓存工具的某些带成功操作返回值的操作( 比如·redis 的 setnx )去set 一个mutex key

      3,当操作返回成功时,再去进行load db 操作,并设置缓存,最后删除 mutex key;

      4,当操作返回失败,证明有线程在load db,当前线程先睡眠一段时间在重试 get 缓存的方法

 

posted @ 2022-02-23 15:59  danny522  阅读(36)  评论(0)    收藏  举报