Redis缓存击穿解决方案

霄
2024-12-12 / 0 评论 / 56 阅读 / 正在检测是否收录...

缓存击穿

描述:

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

 解决方案:

1、设置热点数据永远不过期。

 

2、接口限流与熔断,降级。重要的接口一定要做好限流策略,防止用户恶意刷接口,同时要降级准备,当接口中的某些 服务  不可用时候,进行熔断,失败快速返回机制。

 

3、布隆过滤器。bloomfilter就类似于一个hash set,用于快速判某个元素是否存在于集合中,其典型的应用场景就是快速判断一个key是否存在于某容器,不存在就直接返回。布隆过滤器的关键就在于hash算法和容器大小,

 

4、加互斥锁,互斥锁参考代码如下:

 说明:

          1)缓存中有数据,直接走上述代码13行后就返回结果了

          2)缓存中没有数据,第1个进入的线程,获取锁并从数据库去取数据,没释放锁之前,其他并行进入的线程会等待100ms,再重新去缓存取数据。这样就防止都去数据库重复取数据,重复往缓存中更新数据情况出现。

          3)当然这是简化处理,理论上如果能根据key值加锁就更好了,就是线程A从数据库取key1的数据并不妨碍线程B取key2的数据,上面代码明显做不到这点。

扫描二维码,在手机上阅读!
48

评论

博主关闭了当前页面的评论