侧边栏壁纸
  • 累计撰写 38 篇文章
  • 累计创建 25 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

REDIS-常见的缓存相关问题

michloas
2024-01-17 / 0 评论 / 0 点赞 / 32 阅读 / 2312 字 / 正在检测是否收录...

REDIS-常见的缓存相关问题

在 Redis 中,缓存雪崩、缓存击穿和缓存穿透是三个常见的缓存相关问题,它们可能导致系统性能下降或不稳定。下面对这三个问题进行简要介绍:

1. 缓存雪崩(Cache Avalanche):

定义: 缓存雪崩是指在某个时间点,大量缓存同时失效或过期,导致大量请求直接打到数据库或后端系统,引起系统瞬时压力过大,甚至崩溃。

原因: 通常发生在缓存中的多个键同时失效,可能是由于相同的过期时间或相似的过期时间,或者由于某种外部原因导致缓存同时失效。

解决方案:

  • 设置不同的过期时间,避免缓存同时失效。
  • 使用多级缓存,减少对底层存储的直接依赖。
  • 在缓存层加入自动的容错机制,即使某些缓存失效,也能够从数据库中加载部分数据,减轻压力。

2. 缓存击穿(Cache Miss):

定义: 缓存击穿是指针对某个热点数据的大量请求,在缓存中不存在(Cache Miss)而直接访问底层存储系统,导致数据库压力剧增。

原因: 通常是因为某个缓存键对应的数据在缓存中不存在,但是又被大量请求访问,导致这些请求直接打到底层存储系统。

解决方案:

  • 使用互斥锁,保证只有一个请求去加载数据,其他请求等待加载完成后直接从缓存获取。
  • 针对缓存失效的情况,可以设置短暂的自旋锁,避免多个请求同时击穿。
  • 提前预热缓存,确保热点数据在缓存中存在。

3. 缓存穿透(Cache Penetration):

定义: 缓存穿透是指恶意请求或者非法请求查询缓存中不存在的数据,导致这些请求直接访问底层存储系统,产生大量无效查询。

原因: 可能是由于请求的数据根本不存在,而攻击者利用这一点进行频繁查询。

解决方案:

  • 使用布隆过滤器等数据结构,预先过滤掉不存在的数据请求,减轻对底层存储的直接压力。
  • 对查询参数进行有效性验证,排除无效请求。
  • 在缓存中设置空值(缓存空对象)或错误值,避免频繁查询不存在的数据。

综合采用这些方案,可以有效地防止缓存雪崩、击穿和穿透问题,提高系统的稳定性和性能。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区