事务操作
概述
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)
本文深入探讨Redis事务的特性,包括原子性和依赖于watch功能的幂等性,并通过实际命令演示了如何开启、执行和提交事务。同时,阐述了事务在实际应用中的局限性,以及如何应对事务执行过程中的错误。

4562

被折叠的 条评论
为什么被折叠?



