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事务三特性

Ø 单独的隔离操作

事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

Ø 没有隔离级别的概念

队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行

Ø 不保证原子性

事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

原子性:

程序的原子性指:整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。

原子性在一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。及时在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰。

 
posted @ 2022-01-05 23:22  KwFruit  阅读(49)  评论(0编辑  收藏  举报