ITPub博客

首页 > 数据库 > NoSQL > redis续12-事务

redis续12-事务

原创 NoSQL 作者:a3zi 时间:2015-02-03 23:37:31 0 删除 编辑

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/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: redis续13-乐观锁
请登录后发表评论 登录
全部评论

注册时间:2014-08-15

  • 博文量
    45
  • 访问量
    228899