zoukankan      html  css  js  c++  java
  • redis缓存穿透,击穿,雪崩总结

    1、穿透
    频繁访问redis和数据库中没有的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。
    解决方案:

    接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;
    从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击

    2、击穿
    缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力
    解决方案:
    ①、设置热点数据永远不过期,过期时间分散。
    ②、加互斥锁:redis分布式锁或者,ReentrantLock。获取锁,查询数据库,设置缓存,释放锁。

    3、雪崩
    多个击穿,造成数据库压力过大,甚至当机。
    解决方案
    ①、设置热点数据永远不过期,过期时间分散。
    ②、加互斥锁:redis分布式锁或者,ReentrantLock。获取锁,查询数据库,设置缓存,释放锁。

  • 相关阅读:
    MySQL 批量删除相同前缀的表
    MySQL 命令登录
    MySQL 密码修改
    谷歌浏览器开发者工具截图
    VIM命令图解
    基于环境变量为多用户配置不同的JDK(win)
    Reddit: 只有独生子女才明白的事
    JSONObject与null
    SpringFramework中重定向
    XML修改节点值
  • 原文地址:https://www.cnblogs.com/stubborn-dude/p/14822354.html
Copyright © 2011-2022 走看看