Redis 与数据库协同工作,核心目标是用 Redis 做高速缓存 / 辅助存储,用数据库做持久化、权威数据源。下面从常见架构、数据同步方式、典型场景、一致性问题、最佳实践几个方面系统说明。
架构思想:
读流程:
1. 先查 Redis
- 有 → 直接返回
2. 没有 → 查数据库
- 查到 → 写入 Redis → 返回
- 没查到 → 返回空
写流程:
1. 更新数据库
2. 删除 Redis 缓存(不是更新)
✅ 为什么删除而不是更新缓存?
✅ 这是生产环境最推荐模式
特点:
Write Through:
Read Through:
❌ 缺点:
✅ 多用于本地缓存(如 Guava、Caffeine)
流程:
✅ 优点:
❌ 缺点:
✅ 适合日志、计数、统计类数据
客户端请求
↓
[ Redis ]
↓ hit → 返回数据
↓ miss
[ Database ]
↓
写入 Redis
↓
返回数据
DB: MySQL / PostgreSQL
Cache: Redis String / Hash
Redis: INCR / DECR
DB: 异步落库
Redis: SETNX / RedLock
DB: 保证最终一致性
Redis: 存 session
DB: 用户基础信息
Redis: List / Stream
DB: 消费者落库
✅ Cache Aside + 延迟双删
1. 删除缓存
2. 更新数据库
3. 延迟几百毫秒再删一次缓存
✅ 设置合理的 TTL
即使不一致,也会自动过期
✅ 避免“更新缓存”
更新数据库 + 删除缓存
| 能力 | Redis | 数据库 |
|---|---|---|
| 延迟 | 微秒级 | 毫秒级 |
| 持久化 | 弱 | 强 |
| 事务 | 有限 | 强 |
| 查询能力 | 简单 | 复杂 |
| 数据规模 | 小 | 大 |
✅ 结论:
Redis 负责“快”,数据库负责“准”
❌ 把 Redis 当主数据库
❌ 缓存和数据库双向更新
❌ 缓存永不过期(无 TTL)
❌ 忽略缓存穿透 / 击穿 / 雪崩
Redis 与数据库协同的核心:Redis 做加速层,数据库做权威层,通过“缓存旁路 + 删除缓存 + TTL”保证高性能与一致性。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。