美文网首页redis
5.缓存穿透、缓存击穿、缓存雪崩问题及解决方案

5.缓存穿透、缓存击穿、缓存雪崩问题及解决方案

作者: 程序员小2 | 来源:发表于2022-10-12 09:53 被阅读0次
    3妹

    2哥:3妹,这么晚了还不睡觉啊,在干嘛呢。
    3妹:在学习呢,白天上班比较忙,只能在晚上的时间看会儿书了。
    2哥:3妹加油,你尽早也会成为你羡慕的大牛的。
    3妹:哈哈,多谢2哥。2哥,考考你,你知道redis为什么性能这么高吗?
    2哥:这个不难,之前我也研究地,因为是基于内存、单线程、多路复用、特殊的数据结构等。
    3妹:哇,2哥厉害,再给我讲讲呗。
    2哥:行啊,不过说好,讲完就要睡觉了,熬夜对身体不好。身体是革命的本钱啊。
    3妹:好的好的~

    讲课

    如何解决Redis缓存穿透问题?

    Redis 缓存穿透指的是攻击者故意大量请求一些Redis缓存中不存在key的数据,导致请 求打到数据库上,导致数据库压力过大。

    解决方案如下:

    1.做好参数校验,无效的请求直接返回,只能避免一部分情况,攻击者总是可以找到一些没有覆盖的情况。

    2.对缓存中找不到的key,需要去数据库查找的key,缓存到Redis中,但是可能会导致Redis中缓存大量无效的key,可以设置一个很短的过期时间,例如1分钟。

    3.也可以使用布隆过滤器,将所有可能的存在的数据通过去hash值的方式存入到一个足够大的bitmap中去,处理请求时,通过在bitmap中查找,可以将不存在的数据拦截掉。

    如何解决Redis缓存击穿问题?

    缓存击穿主要指的是某个热点key失效,导致大量请求全部转向数据库,导致数据库压力过大。

    解决方案如下 :

    1.对热点key设置永不过期。

    2.加互斥锁,缓存中没有热点key对应的数据时,等待100ms,由获得锁的线程去读取数据库然后设置缓存。

    如何解决Redis缓存雪崩问题?

    缓存雪崩主要指的是短时间内大量key失效,导致所有请求全部转向数据库,导致数据库压力过大。

    解决方案如下 :

    1.在给缓存设置失效时间时加一个随机值,避免集体失效。

    2.双缓存机制,缓存A的失效时间为20分钟,缓存B的失效时间会比A长一些,从缓存A读取数据,缓存A中没有时,去缓存B中读取数据,并且启动一个异步线程来更新缓存A(如果已经有异步线程正在更新了,就不用重复更新了)。以及更新缓存B,以便延迟B的过期时间。

    相关阅读

    1.Redis概述 https://www.jianshu.com/p/41619e4a00b1
    2.Redis的底层数据结构 https://www.jianshu.com/p/f74697b90a4e
    3.Redis的过期策略和内存淘汰机制 https://www.jianshu.com/p/be681a4d65ff

    相关文章

      网友评论

        本文标题:5.缓存穿透、缓存击穿、缓存雪崩问题及解决方案

        本文链接:https://www.haomeiwen.com/subject/ahlzartx.html