Redis 的事务机制是怎样的 ?

一、基础概念


Redis中是支持事务的,它的事务主要目的是保证多个命令执行的原子性,使其在一个原子操作中执行,不会被打断


需要注意的是,Redis的事务是不支持回滚的从 Redis 2.6.5 开始,服务器将会在累积命令的过程中检测到错误。然后,在执行 exec期间 会拒绝执行事务,并返回一个错误,同时丢弃该事务。

如果事务执行过程中发生错误,Redis会继续执行剩余的命令而不是回滚整个事务


Redis事务相关的命令主要有以下几个:

  • multi: 标记一个事务开始

  • discard: 取消事务,放弃执行事务队列中的所有命令

  • exec: 执行事务队列中的所有的命令

  • unwatch: 取消 WATCH 命令对所有 key 的监视

  • watch key [key ...]: 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其它命令所改动,那么事务将被打断


二、事务执行时会有什么错误 ?


在事务期间,从 Redis 2.6.5 开始,服务器将命令加入事务队列过程中检测到错误。但是后面又说事务执行时也会有错误。这里是不是矛盾了?


Redis错误有两种情况,一种是在命令事务队列排队的过程就就检测到的错误,比如语法错误,比如内存不够了,等等。在这种错误,会在调用 exec 后,命令可能会直接失败。


还有一种错误,是在调用 exec 后,命令执行过程中出现的错误,最常见的就是操作类型不一致,比如对字符串进行列表相关的操作。这种就是在执行过程中才会出现的。


而后面这种错误,Redis认为是不应该出现的。所以需要在开发阶段就避免,这也是他没有提供回滚的一个重要原因


三、下面是一个使用Jedis客户端,借助事务实现电商下单的例子


事务 和 pipeline 管道符的区别


✅什么是Redis的Pipeline,和事务有什么区别?


事务 和 Lua脚本 的区别

✅Redis的事务 和 Lua之间有哪些区别 ?

posted @ 2025-06-19 17:46  jock_javaEE  阅读(15)  评论(0)    收藏  举报