2026-03-23 07:12:51
Redis 事务通过 MULTI/EXEC/DISCARD 命令实现,确保一组命令的原子性执行。以下是其核心处理机制及注意事项:
1. 事务处理流程启动事务使用 MULTI 命令开启事务,后续命令会被放入队列而非立即执行。
命令入队在 MULTI 后输入的任意 Redis 命令(如 SET、INCR)会被暂存到队列中,服务器返回 QUEUED 响应。
提交或回滚
提交(EXEC):执行 EXEC 后,队列中的命令会原子性地执行。若所有命令成功,返回结果列表;若任一命令失败(如语法错误),已执行的命令不会回滚,但后续命令仍会继续执行(Redis 不支持传统数据库的回滚机制)。
回滚(DISCARD):执行 DISCARD 会清空命令队列,取消事务,数据库状态保持不变。
原子性(Atomicity)事务中的命令要么全部执行,要么全部不执行(但需注意:命令错误不会导致已执行命令回滚)。
隔离性(Isolation)Redis 是单线程处理命令,事务执行期间其他客户端的命令会被阻塞,直到事务完成,避免并发干扰。但需注意:
WATCH 机制:可通过 WATCH 监控键,若事务执行前键被修改,则 EXEC 会失败(类似乐观锁)。
持久性(Durability)Redis 事务本身不保证持久性。若需持久化,需配合 RDB 快照 或 AOF 日志(需配置 appendfsync always 或 everysec)。
一致性(Consistency)事务执行前后数据库状态需有效(如避免无效数据类型操作)。
总结:Redis 事务提供了基本的原子性和隔离性,但需谨慎处理错误和持久化需求。对于强一致性场景,建议结合 WATCH 或 Lua 脚本使用。