zoukankan      html  css  js  c++  java
  • 缓存问题[雪崩、击穿]

    缓存穿透

    查询缓存步骤:

    1. 查询K-V数据库缓存。存在返回
    2. 如果数据不存在,则查询后端sql数据库

    缓存穿透

    恶意请求会故意查询在redis等缓存数据库里面不存在的Key,来引发后端数据库的查询。如果数据量很大,则会增加后端的压力。这就是 缓存穿透

    如何避免?

    1. 请求过滤:对所有可能的请求查询先缓存(布隆过滤、BitMap存储...)。在Controller层请求过来进行校验,如果参数符合规则,那么放行,不符合则返回错误。
    2. 缓存空值:如果请求过来缓存数据库查不到同时后端数据库也查不到,则也缓存空值。但是要注意缓存的时间限制的短一些。下次再来请求直接返回缓存的空值。如果这个Key有数据Insert了,则需要立即删除缓存的空值,防止影响业务。
    3. 检查更新:每次有请求过来先检查 key过期时间,及时更新

    缓存雪崩

    当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。导致系统崩溃。

    解决方案:

    1. 高可用集群
    2. 限流降级、加锁
    3. 定时任务不断检查,预先更新快过期缓存

    缓存并发

    比如缓存雪崩后,大量的数据又从数据库里面查询后大量数据进行缓存。

    解决方案:

    分布式锁、控制并发数

  • 相关阅读:
    POJ 1981 最大点覆盖问题(极角排序)
    POJ 1286 Pólya定理
    POJ 1830 高斯消元
    HDU 3364 高斯消元
    Educational Codeforces Round 42D. Merge Equals(STL)
    ZOJ 3955:Saddle Point(思维)
    POJ 3301:Texas Trip(计算几何+三分)
    SCUT 125 :笔芯回文(DP)
    ZOJ 3953:Intervals(优先队列+思维)
    Codeforces Gym101097I:Sticks (思维)
  • 原文地址:https://www.cnblogs.com/biningooginind/p/12609262.html
Copyright © 2011-2022 走看看