原因
也叫做热点key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了 ,无效的请求访问会在瞬间给数据库带来巨大的冲击
高并发访问:可能是正在做活动的key,并访问的平率非常高
解决方案
1.互斥锁
优点
1.没有额外的内存消耗
2.保证一致性
3,实现简单
缺点
1.线程需要等待,性能受到影响
2.可能有死锁的风险
2.逻辑过期
![](https://img-blog.csdnimg.cn/direct/f5f97e7e4aa542518931cd3014126415.png)
优点
1.线程无需等待
缺点
1.不保证一致性
2.有额外的内存消耗
3.实现复杂
具体实现
1.基于互斥锁方式解决缓存击穿问题
此处我们不是用传统意义上的 syncronized锁,而是使用redis的命令setnx,创建一个lock,别的线程再创建lock时就会失败,知道获得锁的进程释放锁,即del lock。为了应对意外情况导致获得锁的进程一直不释放锁,我们还要设置一个ttl时间。