WQhuanm
redis三大主流问题及其解决方案

redis三大主流问题及其解决方案

一,缓存穿透

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。

把不存在的数据存入redis,value为null,短过期时间
缺点:可能造成短期的不一致

二,缓存雪崩

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。

给不同的Key的TTL添加随机值

三,缓存击穿(热点key问题)

一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。

1. 互斥锁

获取不到缓存则尝试获取互斥锁

  • 成功则查询数据库数据并写入缓存
  • 失败则休眠后重试

2. 逻辑过期

数据在缓存不再设置TTL,但是记录逻辑过期时间
查询缓存时,如果数据已经过期,尝试获取互斥锁,成功则另开一个线程去更新数据
在数据更新完毕前获取到的数据均为脏数据

本文作者:WQhuanm
本文链接:https://wqhuanm.github.io/Issue_Blog/2025/01/26/4_redis三大主流问题及其解决方案/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可