Redis
是什么
Redis 是一个内存数据存储,它将数据保存在 RAM 中以实现极快的读写速度,同时可选择性地持久化到磁盘。它本质上是一个键值存储,但支持丰富的数据结构,如列表、集合、有序集合、哈希和流。它最常作为缓存、会话存储、队列或限流器,与主数据库配合使用。
优势
- 得益于内存运行,延迟低至亚毫秒级。
- 结构多样:字符串、哈希、列表、集合、有序集合、流。
- 内置 TTL/过期机制,非常适合缓存和会话。
- 原子操作和 Lua 脚本可用于实现安全的计数器和锁。
- 发布/订阅和流支持消息传递与事件管道。
权衡取舍
- 数据受可用内存限制;大数据集成本高昂。
- 持久化是可选的,崩溃时可能丢失最近的写入。
- 不能替代持久化的关系型存储。
- 集群为分片和故障转移带来了运维复杂度。
何时使用
使用 Redis 来缓存代价高昂的查询结果、存储会话、实现限流、管理任务队列、构建排行榜或传递实时消息。务必将其与一个持有真实数据来源的持久化数据库搭配使用。
与 vibe coding 的契合度
在指挥 AI 时,要明确指出 Redis 是缓存或辅助存储,而非系统的记录源,因此它应当始终为缓存条目设置 TTL,并设计清晰的键命名方案(例如 user:123:profile)。要求 AI 使用 INCR 这样的原子命令来做计数器、用 SET ... NX EX 来做锁,而不是使用可能产生竞态的读-改-写序列。一个好建议:让 AI 实现 cache-aside 模式(读缓存、回退到数据库、再回填缓存),并说明失效策略,以免陈旧数据残留。
# 缓存一个值,1 小时后过期
SET user:123:profile "{\"name\":\"Ada\"}" EX 3600
# 原子的限流计数器
INCR rate:ip:203.0.113.5
EXPIRE rate:ip:203.0.113.5 60
# 分布式锁:仅当不存在时设置,自动过期
SET lock:job:42 "owner-a" NX EX 30
# 用有序集合做排行榜
ZADD leaderboard 4200 "player:7"
ZREVRANGE leaderboard 0 9 WITHSCORES