Redis可作为主存储替代MySQL,适用于高并发、数据模型简单、可接受分级持久化的场景,通过主从复制与热冷分层保障安全与性能。
微服务架构下,分布式存储不是“选一个数据库就行”,而是要按数据类型、一致性要求、读写特征和运维能力分层决策。硬套单一方案,后期大概率要推倒重来。
Redis 不是 MySQL 的替代品,而是互补角色。它适合存那些“临时性、高频读、结构简单、允许丢失”的数据。
session_id → user_info),设 TTL 自动过期,避免手动清理DECR 或 EVAL 脚本),靠单线程+原子指令保操作安全INCR article:123:views),不强求 100% 准确,但要快踩坑点:把 Redis 当主库用,结果某次主从切换丢了几百条支付状态;或者用 KEYS * 清缓存,拖垮整个集群。
它们不是通用 KV 存储,而是专为元数据设计的强一致协调服务。存错东西,性能和可靠性都会打折。
立即学习“go语言免费学习笔记(深入)”;
/services/order/v1/10.0.1.5:8080)、配置项(/config/payment/timeout_ms)、分布式锁 Lease ID常见误用:把 etcd 当成轻量级 Redis 用,存大量 cache:user:* 类键,导致 Raft 日志膨胀、leader 切换频繁。
微服务里文件类数据越来越多,但不是所有文件都该进同一个存储池。
bucket/policy)、天然适合多服务共享关键细节:MinIO 默认不开启纠删码,生产环境务必配 erasure coding;Ceph 的 crush map 设计不合理会导致热点 OSD,上线前必须压测。
「先查本地,未命中再查 Redis 回填」这个模式本身就有竞态,不是加个 sync.Once 就能解决。
singleflight.Group 包裹 Redis 查询逻辑,让相同 key 的并发请求合并为一次后端调用atomic.Value 或带 CAS 的 map 实现真正难的不是代码怎么写,而是想清楚哪一层该承担什么责任——本地缓存管速度,Redis 管共享,etcd 管一致,S3 管容量。混用可以,但边界必须划清。