📅【Redis学习笔记】缓存篇
type
status
date
slug
summary
tags
category
icon
password
Blocked by
Blocking
AI summary
三大缓存问题
缓存击穿、缓存雪崩、缓存穿透
问题 | 缓存击穿 | 缓存雪崩 | 缓存穿透 |
定义 | 热点key过期,大量请求直接访问数据库 | 大量key同时过期或Redis宕机 | 查询不存在的数据,每次都访问数据库 |
特点 | 单个热点key(缓存中不存在但db中存在) | 大量key | 不存在的key(缓存和db都不存在) |
影响 | 数据库压力突增 | 数据库可能宕机 | 数据库压力大,CPU高 |
缓存雪崩解决方案
方案 | 实现方式 | 优点 | 缺点 |
过期时间打散 | 在基础时间上加随机值 | 简单易实现 | 可能不够精确 |
高可用集群 | Redis集群 + 哨兵 | 可靠性高 | 成本较高 |
熔断降级 | 服务熔断或返回默认值 | 保护系统 | 数据不够实时 |
缓存穿透解决方案
方案 | 实现方式 | 优点 | 缺点 |
布隆过滤器 | 快速判断key是否存在 | 高效节省空间 | 有误判可能 |
缓存空值 | 对空结果也进行缓存 | 实现简单 | 占用缓存空间 |
参数校验 | 对参数进行合法性验证 | 避免无效查询 | 可能有遗漏 |
预防措施
场景 | 预防措施 | 实现方式 |
击穿 | 预热机制 | 提前将热点数据加载到缓存 |
雪崩 | 监控预警 | 监控Redis性能指标 |
穿透 | 数据同步 | 定期同步布隆过滤器 |
如何实现数据的一致性
一、问题分析
数据一致性问题主要出现在以下场景:
- 更新数据时的并发问题
- 缓存操作失败导致的不一致
- 读写并发导致的数据不一致
1. Cache Aside Pattern(推荐)
2. 消息队列重试机制
3. Canal + 消息队列方案
三、最佳实践建议
- 选择合适的策略:
- 一般场景:使用Cache Aside Pattern
- 高可靠要求:使用消息队列重试机制
- 完全解耦:使用Canal + 消息队列方案
- 防护措施:
- 监控与告警:
- 错误处理:
通过以上方案的组合使用,可以最大程度保证数据的一致性。需要注意的是,在分布式系统中很难做到强一致性,通常我们追求的是最终一致性。选择哪种方案需要根据业务场景、性能要求和开发维护成本来综合考虑。
Prev
【Redis学习笔记】大key问题
Next
【Redis学习笔记】高可用篇
Loading...