简单例子讲明白Redis事务

Publish: June 26, 2019 Category: 运维 1 Comment

熟悉关系型数据库的同学对应该对事务比较了解,简单的说:事务表示一组动作,要么全部执行,要么全部不执行。还是用经典的银行转帐来做说明,用户a要给用户b转一笔款,正确的执行流程是a账户减少指定金额,b账户增加指定金额。这两个动作要么同时执行,要么都不执行才能保证数据的准确性,以保证数据一致。

Redis事务理解和示例

Redis提供了“简单”的事务,将一组需要一起执行的命令放到multi和exec两个命令之间,multi代表事务开始,exec代表事务结束,他们之间的命令是原子顺序执行的。我们一转帐来进行模拟这个过程:

#设置用户a和b的额度都是100

127.0.0.1:6379> set user:a:quota 100
OK
127.0.0.1:6379> set user:b:quota 100
OK
#执行转帐事务:a减掉20 b增加20
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> DECRBY user:a:quota 20
QUEUED
127.0.0.1:6379> INCRBY user:b:quota 20
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 80
2) (integer) 120

#查看执行结果

127.0.0.1:6379> MGET user:a:quota user:b:quota
1) "80"
2) "120"

可以看到decrby和incrby命令返回结果都是QUEUED,代表命令并没有真正执行,而是暂时保存在redis中,当exec命令执行之后转帐行为才算完成。如果要停止执行该事务可以使用discard命令代替exec命令即可。

阅读剩余部分...