Redis事务
本人英文不好,试着去Redis官网看英文版文档,借助有道词典,花费3天时间,吭哧吭哧的把Redis的事务看了一遍,最后文档上说:将来可能把事务部分移除掉。真是心都碎了,有木有!
既然看完了,试着写个总结吧,不足之处,望之指正。
Redis事务
事务命令:MULTI,EXEC,DIDCARD,WATCH,UNWATCH
使用:MULTI:开启一个事务,并会有一个事务队列,客户端发来的命令,按顺序放入此队列中。这个命令总会返回"OK";
EXEC命令,一次性的执行事务队列中的命令。
DISCARD命令,清空事务队列,并取消事务的执行,
事务中的错误:
1、错误发生在调用CALL之前,例如语法错误(参数数量错误,命令拼写错误....)。
2、错误发生在调用CALL之后,参数类型错误,例如对一个string类型的key使用list操作。
对于第一个错误,客户端可以很容易的避免:向队列中每添加一个命令都会返回“QUEUE”字符串,表示添加成功,否则返回一个错误;客户端可以取消事务的执行。
从版本2.6.5开始,服务端会记录这种错误,在调用EXEC命令时,会拒绝这次事务的执行,并且自动取消事务。
对于第二类错误,即使发生了错误,Redis不会取消事务的执行。执行结果以会返回给客户端,由客户端决定。
Redis不支持事务回滚
一句话,为了性能。
事务取消,
使用DISCARD命令可以终止一个事务,链接的状态恢复正常。
WATCH命令
WATCH用来监控一个或多个健,被监控的健在被修改了之后,所有的事务都不会执行成功。
比如:
redis> SET key 1
OK
redis> WATCH key
OK
redis> SET key 2
OK
redis> MULTI
OK
redis> SET key 3
QUEUED
redis> EXEC
(nil)
redis> GET key
"2"
上述例子:Watch key之后,又重新设置了key的值,因此,此后的事务不能成功执行,但是在开启事务之前的修改仍然是成功的。
WATCH命令为EXEC命令创建一个执行条件,Redis只有在其它客户端不修改被监控的键时,才会去执行一个事务,否则这个事务将会失败。WATCH命令可以被多次调用,EXCE命令执行之后,所有被WATCH的键,都会被释放。客户端断开连接时也会释放所有键。
浙公网安备 33010602011771号