redis
事务
redis
事务可以一次执行多个命令,并且有3个重要的保证:
- 批量操作中在发送
exec
命令前被放入到队列缓存- 收到
exec
命令后进入事务操作.事务中任意命令执行失败,其他命令仍然被执行.- 在事务执行过程中,其他客户端提交的命令不会插入到事务执行命令序列中.
一个事务从开始到执行会经历3个阶段
- 开始事务
- 命令入队
- 执行事务
1.常用命令
命令 描述 discard
取消事务,放弃执行事务内的所有命令 exec
执行所有事务内的命令 multi
标记一个事务的开始 unwatch
取消 watch
命令对所有key
的监视watch key [key]
监视一个或多个 key
,如果在事务执行之前key
被
其他命令改动,那么事务被打断
2.实例
# 以 multi 开始一个事务,然后将多个命令入队到事务中,最后由 exec 触发事务. 127.0.0.1:6379> MULTI OK 127.0.0.1:6379> set mykey 'this is a test' QUEUED 127.0.0.1:6379> get mykey QUEUED 127.0.0.1:6379> hset myhashkey field1 test QUEUED 127.0.0.1:6379> hget myhashkey field1 QUEUED 127.0.0.1:6379> exec 1) OK 2) "this is a test" 3) (integer) 1 4) "test"
单个
redis
命令的执行是原子性的,但是redis
事务不支持原子,不支持回滚操作.事务相当于一个打包的批量执行脚本.但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做.