Redis从入门到精通-事物和锁机制-演示乐观锁和事物特性
1、使用WATCH key [key ...]命令
在执行multi之前,先执行watch key1 [key2],可以监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
案例:
图一先执行,此时key balance的 key 版本 号被修改。
图二再执行,对比版本号不一致,执行失败。
2、unwatch
取消WATCH 命令对所有key 的监视。
如果在执行WATCH 命令之后,EXEC 命令或DISCARD 命令先被执行了的话,那么就不需要再执行UNWATCH 了。
http://doc.redisfans.com/transaction/exec.html
3、Redis事务三特性
Ø 单独的隔离操作
事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
Ø 没有隔离级别的概念
队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行
Ø 不保证原子性
事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚
原子性:
程序的原子性指:整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。
原子性在一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。及时在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰。