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.  过期时间设置随机值

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

    为了未来有更多的选择
  • 相关阅读:
    Linux下chkconfig命令详解
    几种主流的快照技术
    HANA内存数据库与oracle数据库的性能比较
    计算机网络知识汇总
    bzoj1211: [HNOI2004]树的计数 prufer序列裸题
    1003: [ZJOI2006]物流运输 最短路+dp
    HDU
    2243: [SDOI2011]染色 树链剖分+线段树染色
    bzoj1036: [ZJOI2008]树的统计Count 树链剖分
    bzoj1042: [HAOI2008]硬币购物 dp+容斥
  • 原文地址:https://www.cnblogs.com/zhixinSHOU/p/14563148.html
Copyright © 2011-2022 走看看