redis缓存问题的解决方案

2021/11/15 19:10:41

本文主要是介绍redis缓存问题的解决方案,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

击穿、雪崩和穿透

  • 击穿
  • 雪崩
  • 穿透
    • **击穿解决**
    • **雪崩解决**
    • **穿透解决**

击穿

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

雪崩

缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是, 缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。

穿透

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

击穿解决

1.设置永不过期。(粗暴)
2.增加互斥锁。单线程更新缓存。demo如下(copy的)
在这里插入图片描述

雪崩解决

1.在固定过期时间上加随机时间(如5+random(2));
2.建立备份缓存,缓存A和缓存B,A设置超时时间,B不设值超时时间,先从A读缓存,A没有读B,并且更新A缓存和B缓存;

穿透解决

1.数据不存在的,查询时写Null到缓存,并设置较短的过期时间。(简单粗暴)。
2.用布隆过滤器过滤不存在的key直接返回null。



这篇关于redis缓存问题的解决方案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程