redis事务相关命令:multi exec discard watch unwatch
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
redis事务
watch 检查再设置 CAS行为 实现乐观锁。
做为watch命令的参数建会受到redis的兼容,redis能够检测受监视数据的变化,在执行exec命令之前,如果redis检测到至少一个键被修改了,按个整个事务终止运行。
然后执行exec命令会返回nui的一个值,提醒用户事务运行失败。
其实 watch有一个值被改变了,redis都不会进入事务。
watch key 可以一次性watch多个值,watch可以被调用多次,watch的值直到exec命令被调用之时为止。 或使用unwatch后解除。
只要是 watch 监控起来的数据,有任意的改变,multi 事务都会失败,有一个值改变,也不会成功。
如果被看起来的数据,
客户端1:
watch count
客户端2:
incr count
会执行成功吗? 答案: 会的
那么在上面的基础上,我们执行了,
multi 开启了事务
set news 123
exec
这个事务会成功吗?
答案:否定的,不会成功的。
注意:
exec后所有被舰对空的建都会变为为受监控的状态,redis不管是不是否被终止。
当客户端连接被关闭时,所有的键都会变为未受监控的状态。
unwatch 不需要任何参数,这样便能清除所有受监控的键。
事务处理流程:
multi 后所有的操作将会放到一个队列里。
总结:在使用事务的时候,请一定要watch 否则会到造成数据不一致。
redis将会将一个事务中所有的命令序列化,然后按顺序执行,在一个redis事务中,redis要么执行其中所有命令,要么一行也不执行。
Redis 事务命令
下表列出了 redis 事务的相关命令:
序号 命令及描述
1 DISCARD
取消事务,放弃执行事务块内的所有命令。
2 EXEC
执行所有事务块内的命令。
3 MULTI
标记一个事务块的开始。
4 UNWATCH
取消 WATCH 命令对所有 key 的监视。
5 WATCH key [key ...]
监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。