标签:
命令示例:
1. 事务被正常执行:
#在Shell命令行下执行Redis的客户端工具。 /> redis-cli #在当前连接上启动一个新的事务。 redis 127.0.0.1:6379>multi OK #执行事务中的第一条命令,从该命令的返回结果可以看出,该命令并没有立即执行,而是存于事务的命令队列。 redis 127.0.0.1:6379>incr t1 QUEUED #又执行一个新的命令,从结果可以看出,该命令也被存于事务的命令队列。 redis 127.0.0.1:6379>incr t2 QUEUED #执行事务命令队列中的所有命令,从结果可以看出,队列中命令的结果得到返回。 redis 127.0.0.1:6379>exec 1) (integer) 1 2) (integer) 1 2. 事务中存在失败的命令: #开启一个新的事务。 redis 127.0.0.1:6379>multi OK #设置键a的值为string类型的3。 redis 127.0.0.1:6379>set a 3 QUEUED #从键a所关联的值的头部弹出元素,由于该值是字符串类型,而lpop命令仅能用于List类型,因此在执行exec命令时,该命令将会失败。 redis 127.0.0.1:6379>lpop a QUEUED #再次设置键a的值为字符串4。 redis 127.0.0.1:6379>set a 4 QUEUED #获取键a的值,以便确认该值是否被事务中的第二个set命令设置成功。 redis 127.0.0.1:6379>get a QUEUED #从结果中可以看出,事务中的第二条命令lpop执行失败,而其后的set和get命令均执行成功,这一点是Redis的事务与关系型数据库中的事务之间最为重要的差别。 redis 127.0.0.1:6379>exec 1) OK 2) (error) ERR Operation against a key holding the wrong kind of value 3) OK 4) "4" 3. 回滚事务: #为键t2设置一个事务执行前的值。 redis 127.0.0.1:6379>set t2 tt OK #开启一个事务。 redis 127.0.0.1:6379>multi OK #在事务内为该键设置一个新值。 redis 127.0.0.1:6379>set t2 ttnew QUEUED #放弃事务。 redis 127.0.0.1:6379>discard OK #查看键t2的值,从结果中可以看出该键的值仍为事务开始之前的值。 redis 127.0.0.1:6379>get t2 "tt" 更多精彩内容请关注:http://bbs.superwu.cn
关注超人学院微信二维码:
|
标签:
原文地址:http://www.cnblogs.com/CRXY/p/4572136.html