redis渐入佳境(08) 事务控制

的事务控制主要由如下几个命令:

MULTIEXECDISCARDWATCH

其中multi是用来开启一个事务、exec是提交事务、discard取消事务、watch是用来实现乐观锁。

注意:redis对事务的支持非常简单,它只能保证事务中的操作不被其他客户端打断。

还有redis事务不会自动回滚,也就是事务队列中不会因为一个操作的失败而自动回滚其他操作,这一点是与关系型数据库不一样的地方请注意。

下面就通过代码来实现一下事务:

[redies@localhost redis-2.4]$ redis-cli redis 127.0.0.1:6379> auth xuelianbo OK redis 127.0.0.1:6379> keys * 1) "name" redis 127.0.0.1:6379> multi //开启一个事务的上下文 OK redis 127.0.0.1:6379> set name xue //执行各种写的操作 QUEUED redis 127.0.0.1:6379> set name lian QUEUED redis 127.0.0.1:6379> exec //提交事务队列 1) OK 2) OK redis 127.0.0.1:6379> get name "lian" redis 127.0.0.1:6379> multi OK redis 127.0.0.1:6379> set name 1 QUEUED redis 127.0.0.1:6379> discard //取消事务队列 OK redis 127.0.0.1:6379> get name "lian" redis 127.0.0.1:6379> set age 10 OK redis 127.0.0.1:6379> multi OK redis 127.0.0.1:6379> incr age QUEUED redis 127.0.0.1:6379> incr name QUEUED redis 127.0.0.1:6379> exec //提交事务 1) (integer) 11 //此处就出现了,部分成功的现象 2) (error) ERR value is not an integer or out of range redis 127.0.0.1:6379> keys * 1) "age" 2) "name" redis 127.0.0.1:6379> watch age //制造一个乐观锁,watch age OK redis 127.0.0.1:6379> multi OK redis 127.0.0.1:6379> set age 11 QUEUED redis 127.0.0.1:6379> set age 12 QUEUED redis 127.0.0.1:6379> exec 1) OK 2) OK redis 127.0.0.1:6379> watch age //制造一个乐观锁的情形, 提交前其他客户端修改了watch的对象 OK redis 127.0.0.1:6379> multi OK redis 127.0.0.1:6379> set age 12 QUEUED redis 127.0.0.1:6379> exec (nil) //返回修改失败 redis 127.0.0.1:6379>

   下面是另一个客户端制造乐观锁的指令,其实就是在上面的回话watch的时候进行了age的修改。

[redies@localhost redis-2.4]$redis-cli
redis 127.0.0.1:6379> keys *
(error) ERR operation not permitted
redis 127.0.0.1:6379> auth xuelainbo
(error) ERR invalid password
redis 127.0.0.1:6379> auth xuelianbo
OK
redis 127.0.0.1:6379> keys *
1) "age"
2) "name"
redis 127.0.0.1:6379> set age 20
OK
redis 127.0.0.1:6379>

 

 

 

 

你可能感兴趣的:(redis)