事务操作
概述
Redis事务让一组命令在单个步骤中执行。
事务中有两个属性,这说明如下:
在一个事务中所有命令按顺序执行,作为一个单一独立的操作。
Redis事务也是原子的。原子就意味着要么所有命令都执行,要么都不进行处理。
但是Redis的Transactions提供的并不是严格的ACID的事务,在执行中服务器宕机,那么会有一部分命令执行了,剩下的没执行)
Redis还提供了一个Watch功能,你可以对一个key进行Watch,然后再执行Transactions,在这过程中,如果这个Watched的值进行了修改,那么这个Transactions会发现并拒绝执行。这个功能可以防止别人修改的数据被覆盖。
命令
命令原型 | 时间 | 命令描述 | 返回值 |
MULTI | O(1) | 开启事务 | 返回OK,其他值为失败信息 |
EXEC | O(1) | 提交事务 | 返回OK |
实例
#A客户端链接redis数据库
[root@datahubdb1 bin]# ./redis-cli -a daphne
127.0.0.1:6379>
#开始事务
127.0.0.1:6379> multi
OK
#添加执行命令
127.0.0.1:6379> set transaction1testtransaction
QUEUED
127.0.0.1:6379> get transaction1
QUEUED
127.0.0.1:6379> incr iindex
QUEUED
#提交事务
127.0.0.1:6379> exec
1) OK
2) "testtransaction"
3) (integer) 1
127.0.0.1:6379>
127.0.0.1:6379> multi
OK
127.0.0.1:6379> del transaction1
QUEUED
127.0.0.1:6379> get transaction1
QUEUED
#添加失败的语法
127.0.0.1:6379> get1 transaction1
(error) ERR unknown command 'get1'
127.0.0.1:6379> exec
#提交事务失败,说明keytransaction1 已经不存在了,不能get
(error) EXECABORT Transaction discardedbecause of previous errors.
127.0.0.1:6379>
您觉的有所收获,请保持持续的关注。
您发现博客中有的纰漏,请指正。
您有更好的建议或更好的实现方式,请赐教。(zhenyun.su@qq.com)