4.redis的事务以及乐观锁的实现

数据库的事务具有原子性,一致性。但是redis的事务有些特殊,下面会说。

命令中事务的执行

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k1
QUEUED
127.0.0.1:6379> exec 

事务的取消

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> discard

  

中间的命令部分:

1)编译有错误,不会执行  比如getset k1, 这个命令本身就不对

2)   运行时异常,会被执行  比如 set k1 aa; incr k1  从这里可以看出redis的事务不保证原子性

 

乐观锁的实现

客户端1

watch money
multi
set money 100
exec 

客户端2

set money 200

客户端先watch 然后客户端2修改了值  ,最终执行客户端1的exec,会导致客户端1执行失败

 

unwatch 取消监视
exec执行完之后,自动unwatch之前的watch

上一篇:flume实时读取文件到kafka


下一篇:***机器学习于数据分析学习笔记之常用函数操作***