缓存的击穿及解决方案

定义及图解

缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时 候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把 DB 压垮。 如下图所示:
在这里插入图片描述

解决方案

方案一:使用互斥锁: 当缓存失效时,不立即去load db,先使用如 Redis 的 setnx 去设置一个互斥锁,当操作成功返回时再进行 load db的操作并回设缓 存,否则重试get缓存的方法 。
在这里插入图片描述
方案二
方案二:逻辑过期

  1. 在设置key的时候,设置一个过期时间字段一块存入缓存中,不给当前 key设置过期时间
  2. 当查询的时候,从redis取出数据后判断时间是否过期
  3. 如果过期则开通另外一个线程进行数据同步,当前线程正常返回数据, 这个数据不是最新
    在这里插入图片描述

相关推荐

  1. 缓存穿透、击穿、雪崩解决方法

    2024-07-14 05:38:01       28 阅读
  2. Redis缓存穿透、缓存雪崩和缓存击穿解决方案

    2024-07-14 05:38:01       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 05:38:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 05:38:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 05:38:01       58 阅读
  4. Python语言-面向对象

    2024-07-14 05:38:01       69 阅读

热门阅读

  1. 华为SRG2200 端口映射 & 双向NAT & 回流

    2024-07-14 05:38:01       28 阅读
  2. 宕机/脱机

    2024-07-14 05:38:01       26 阅读
  3. 【LC刷题】DAY24:122 55 45 1005

    2024-07-14 05:38:01       30 阅读
  4. Qt/QML学习-BusyIndicator

    2024-07-14 05:38:01       22 阅读
  5. 算法热门面试题二

    2024-07-14 05:38:01       29 阅读
  6. pyinstaller系列教程(一)-基础介绍

    2024-07-14 05:38:01       20 阅读
  7. 大语言模型系列-Transformer

    2024-07-14 05:38:01       25 阅读
  8. Layer2是什么?为什么需要Layer2?

    2024-07-14 05:38:01       25 阅读