字节流的博客

redis 事务

1. 事务

Redis中的事务(transaction)是一组命令的组合.事务同命令一样,是redis最小执行单位(事务和命令都是原子操作),一个事务中的命令要么都执行,要么都不执行.
事务执行的示例代码如下:

1
2
3
4
>multi
>set key 1
>set key 2
>exec

2. 注意

  • Redis 2.6.5之前的版本会忽略有语法错误的命令,然后执行事务中语法正确的命令.
  • 运行错误:redis事务中在执行事务之前对于运行错误(如用散列类型的命令操作集合类型的键)是无法发现的,如果事务里面出现了 一条语法错误的命令,事务里的其他命令仍会执行.
  • Redis不支持事务回滚(指将一个事务已经完成对数据库的修改操作撤销).

3. 相关命令

  • multi 事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由exec命令原子性(atomic)地执行;
  • exec 执行所有事务块内的命令.假如某个(或某些) key 正处于watch命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么exec 命令只在这个(或这些) key 没有被其他命令所改动的情况下执行并生效,否则该事务被打断(abort);
  • watch 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断;
  • unwatch 取消watch命令对所有 key 的监视.如果在执行watch命令之后,exec 命令或discard 命令先被执行了的话,那么就不需要再执行unwatch了;
  • discard 取消事务,放弃执行事务块内的所有命令。
Thanks! 😊