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
取消事务,放弃执行事务块内的所有命令。