zoukankan      html  css  js  c++  java
  • redis 处理缓存击穿以及缓存雪崩

    缓存击穿

    1. 缓存击穿简述

      某一个热点数据在缓存中失效,请求穿过redis到达DB,造成DB压力过大

    2. 怎么解决缓存击穿

     1. 使用redis 作为分布式互斥锁(mutex lock

      实现步骤:

    1. 多线程请求redis (请求为空,若不做处理会发生缓存击穿)
    2. 请求分布式锁 (使用方式可以参考https://www.cnblogs.com/zhixinSHOU/p/14562405.html)
    3. 抢到锁的查询数据库,刷新redis,没抢到锁的线程sleep
    4. sleep时间结束返回 1 

      注:使用分布式锁的时候必须设置过期时间,否则会有死锁的风险

     2. 提前更新缓存

      前提是缓存数据未失效,可以在获取的时候判断过期时间是否快要失效了,如果是则返回缓存数据的同时重新更新该值的过期时间,如果该数据已经过期了,那么还是需要采用第一种解决方式

    缓存雪崩

    1. 缓存雪崩简述

      和缓存击穿类似,但是区别是在于缓存击穿是某一个热点数据失效,而缓存雪崩是针对某一批的热点数据同时失效

    2. 怎么解决缓存雪崩

     1. 使用redis 作为分布式互斥锁(mutex lock

      和缓存击穿的解决方式类似

     2.  过期时间设置随机值

      可以在原有的失效时间基础上增加一个随机值,让缓存的失效时间错开,就可以有效的避免缓存雪崩。

    为了未来有更多的选择
  • 相关阅读:
    【Python教程】3道循环结构练习题
    python3中实现print不换行的方法
    零基础学Python:字典(Dictionary)详细教程
    TS错误提示
    v-slot的简单理解应用
    Typora使用方法简单整理
    Java基础系列(6)- 面向对象(中)
    monkey基础 (7)
    monkey基础 (6)
    monkey基础 (5)
  • 原文地址:https://www.cnblogs.com/zhixinSHOU/p/14563148.html
Copyright © 2011-2022 走看看