八、原子性与编程
Redis 提供多种「把多步合成一次执行」的机制,但它们的原子性、网络开销与回滚语义各不相同,必须区分清楚。
- 事务与 WATCH:
MULTI/EXEC/DISCARD/WATCH,及「不回滚」的含义。 - Pipeline 与批处理:减少 RTT,但非原子。
- Lua 脚本:原子执行、
KEYS/ARGV、阻塞风险与集群限制。 - Redis Functions:7.0 GA,持久化与复制、与
EVAL的差异。
四种机制对比
| 机制 | 原子性 | 网络往返 | 回滚 | Cluster 限制 |
|---|---|---|---|---|
| 事务 MULTI/EXEC | 是(顺序执行不被打断) | 每命令入队 | 不支持 | 多键须同槽 |
| Pipeline | 否 | 合并为一次 | 无概念 | 各命令独立路由 |
| Lua 脚本 | 是(脚本内串行) | 一次 | 无(需自行处理) | KEYS 须同槽 |
| Functions | 是 | 一次 | 无 | KEYS 须同槽 |
