欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
Redis事务简介
 
概述
 
事务是一个业务,也可以看成是一个逻辑工作单元,是为了保证业务的完整,数据的正确而推出的一种控制机制,原则上来讲,事务必须要满足ACID四个特性(原子性,一致性,隔离性,持久性),在多个事务
 
在并发执行,为更好保证事务的四个特性的实现,通常会对事务加锁,Redis为了性能,采用了乐观锁方式进行事务控制,它使用watch命令监视给定的key,当exec(提交事务)的时候,如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key。注意watch的key是对整个连接有效的,如果连接断开,监视和事务都会被自动清除。当然exec,discard,unwatch命令都会清除连接中的所有监视。
 
基本指令
 
redis进行事务控制时,通常是基于如下指令进行实现,例如:
 
multi 开启事务
 
exec 提交事务
 
discard 取消事务
 
watch 监控,如果监控的值发生变化,则提交事务时会失败
 
unwatch 去掉监控
 
Redis保证一个事务中的所有命令要么都执行,要么都不执行(原子性)。如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行。而一旦客户端发送了EXEC命令,所有的命令就都会被执行,即使此后客户端断线也没关系,因为Redis中已经记录了所有要执行的命令。
 
Redis事务控制实践
 
exec提交事务
 
例如:模拟转账,tony 500,jack 200,tony转给jack100。过程如下:
 
127.0.0.1:6379> set tony 500
 
OK
 
127.0.0.1:6379> set jack 200
 
OK
 
127.0.0.1:6379> mget tony jack
 
1) "500"
 
2) "200"
 
127.0.0.1:6379> multi #开启事务
 
OK
 
127.0.0.1:6379(TX)> decrby tony 100 #所有指令操作会进入到队列
 
QUEUED
 
127.0.0.1:6379(TX)> incrby jack 100
 
QUEUED
 
127.0.0.1:6379(TX)> mget tony jack
 
QUEUED 
 
127.0.0.1:6379(TX)> exec  #提交事务
 
1) (integer) 400
 
2) (integer) 300
 
3) 1) "400"
 
   2) "300"
 
127.0.0.1:6379> mget tony jack
 
1) "400"
 
2) "300"
 
127.0.0.1:6379>

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h65263.shtml