zoukankan      html  css  js  c++  java
  • redis——缓存穿透、缓存击穿、缓存雪崩

    一、概念

    简单的redis实现缓存逻辑的泳道图

    缓存穿透:查询缓存不存在,查询数据库不存在

    缓存击穿:缓存过期导致查询缓存不存在,查询数据库存在

    缓存雪崩:缓存数据大量过期导致的查询缓存不存在,查询数据库存在

    三种缓存问题其实有一个共同点:查询数据时缓存中不存在。

    二、缓存穿透

    在高并发下,查询一个不存在的数据,可能是恶意攻击例如查询数据库索引id = -1;导致查询缓存时一定不存在,大量的请求直接落到数据库上。

    解决方案:① 数据校验:如上面id不能小于0;② 空缓存,在缓存中设置redis.set(id,null)并设置过期时间 ③ 布隆过滤器:redis布隆过滤器需要安装插件

    三、缓存击穿

    在高并发下,查询热点数据,但缓存数据刚过期,导致大量的请求直接落到数据库上。

    解决方案:① 直接将热点数据设置永久数据;② 热点数据过期时,读取数据库加锁,然后更新缓存 ③ 规定业务过期时间存在value(业务过期时间<缓存过期时间)中,由业务代码判断是否需要更新。

    四、缓存雪崩

    在高并发下,缓存中数据大量过期,导致大量的请求直接落到数据库上。

     解决方案:① 可以将过期时间设置为:基础时间+随机时间形式。

  • 相关阅读:
    nginx源代码分析--监听套接字的创建 套接字的监听 HTTP请求创建连接
    JSP中Session的使用
    令人作呕的OpenSSL
    bottle的几个小坑
    UVA 11997
    Rational Rose 2007 &amp;Rational Rose 2003 下载及破解方法和汉化文件下载
    MyEclipse下XFire开发Webservice实例
    OpenTSDB设计解读
    Spring整合Hibernate的步骤
    linux服务之audit
  • 原文地址:https://www.cnblogs.com/wqff-biubiu/p/12292416.html
Copyright © 2011-2022 走看看