首页 > 数据库 > NoSQL > redis续12-事务
Redis和众多的关系型数据库一样,也有提事务机制。
在Redis中,主要有MULTI/EXEC/DISCARD/WATCH/UNWATCH这些命令来操作事务。
如果有接触过关系型数据库的朋友,一样听说过事务中的一个典型的案例就是银行汇款!
事务有一个重要的特性,就是要么全部执行,要么全部不执行,若中断必回滚回去!
在redis的事务中,就有点弱了,在执行跨库多命令时,有时候回滚就有点问题。我们先看看命令,再实验一下:
MULTI 命令:
标记事务的开始,其后执行的命令都将被存入命令队列,直到执行EXEC时,这些命令才会被原子的执行
EXEC 命令:
执行在一个事务内命令队列中的所有命令,同时将当前连接的状态恢复为正常状态,即非事务状态。
DISCARD 命令:
回滚事务队列中的所有命令,同时再将当前连接的状态恢复为正常状态,即非事务状态。
WATCH命令:
回滚事务队列中的所有命令,同时再将当前连接的状态恢复为正常状态,即非事务状态。
UNWATCH 命令:
取消当前事务中指定监控的Keys,如果执行了EXEC或DISCARD命令,则无需再手工执行该命令了,因为在此之后,事务中所有被监控的Keys都将自动取消。
#事务例子1-新建事务:
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
#用exec命令来执行事务队列中的所有命令
redis 127.0.0.1:6379> exec
1) (integer) 1
2) (integer) 1
#事务例子2-回滚事务:
#为键name设置一个事务执行前的值。
redis 127.0.0.1:6379> set name sam
OK
#建一个事务。
redis 127.0.0.1:6379> multi
OK
#为该键设置一个新值。
redis 127.0.0.1:6379> set name samyang
QUEUED
#取消事务
redis 127.0.0.1:6379> discard
OK
#查看name的值
redis 127.0.0.1:6379> get name
"sam"
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29806344/viewspace-1425654/ ,如需转载,请注明出处,否则将追究法律责任。