📅Redis-缓存
type
status
date
slug
summary
category
tags
icon
password
AI summary
Blocked by
Blocking
Category
三大缓存问题
缓存击穿、缓存雪崩、缓存穿透
问题 | 缓存击穿 | 缓存雪崩 | 缓存穿透 |
定义 | 某个热点 Key 过期瞬间,海量并发请求直接打到数据库,造成数据库压力暴涨 | 大量 key 在某个时刻同时过期,或 Redis 集群整体不可用,导致大量请求直接访问数据库,引起系统雪崩 | 客户端不断访问不存在的数据,由于缓存和数据库都没有该 key,所有请求都会访问 DB |
特点 | 单个热点key(缓存中不存在但db中存在) | 大量key | 不存在的key(缓存和db都不存在) |
影响 | 数据库压力突增 | 数据库可能宕机 | 数据库压力大,CPU高 |
缓存击穿方案TODO
缓存雪崩解决方案
方案 | 说明 |
过期时间随机化 | 防止大量 key 同时过期 |
Redis 高可用(哨兵/Cluster) | 防止 Redis 挂了导致雪崩 |
熔断/限流/降级 | 大量请求到 DB 时做保护 |
服务多副本 + 隔离池 | 防止压死核心服务 |
缓存穿透解决方案
方案 | 优点 | 缺点 |
布隆过滤器 | 拦截不存在的 Key | 有误判,不可删除单个元素 |
缓存空值(短 TTL) | 简单、有效 | 缓存空间占用 |
参数校验 | 请求层过滤无效 ID | 覆盖有限 |
接口限流 | 减少恶意流量 | 不解决根本问题 |
预防措施
场景 | 预防措施 | 实现方式 |
击穿 | 预热机制 | 提前将热点数据加载到缓存 |
雪崩 | 监控预警 | 监控Redis性能指标 |
穿透 | 数据同步 | 定期同步布隆过滤器 |
如何实现数据的一致性
Cache Aside pattern
读流程:先查缓存→未命中缓存查DB→写缓存
写流程:先写DB→删除缓存
为什么写时是删缓存,而不是更新缓存?
避免 DB 和 Cache 不一致,同时删除逻辑简单可靠。
但还是存在并发问题:可能出现写后立即读,此时缓存未更新的瞬间,数据不一致。对于大部分业务来说,短期内不一致,最终一致性是可接受的。
Prev
Redis-高可用
Next
Redis-持久化
Loading...