您的位置:首页 > 数据库 > Redis

【Redis学习笔记(七)】 Redis中的事务

2016-02-16 16:31 483 查看
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50675302

在【Redis学习笔记】前面几篇文章中,我们简单介绍了Redis中的五种数据结构相关的命令,今天,我们来介绍一下Redis中的事务Transaction。

一、什么是事务

如果你之前接触过MySQL、Oracle等数据库,一定听说过“事务”的概念。所谓事务,是指作为单个逻辑工作单元执行的一系列操作,要么全部完全地执行,要么全部都不执行。Redis中“事务”的概念与诸如上述的数据库中“事务”一致,可以一次性执行多个Redis命令,并保证以下两点:

事务是一个单独的隔离操作:一个事务中的命令逐一按顺序执行。

事务是一个原子性操作:原子性就意味着一个事务中的所有命令要么全部执行,要么全都不执行。

二、Redis中事务操作

1、相关命令介绍

Redis提供了五个与事务相关的命令:

序号命令功能
1multi标识一个事务的开始
2exec执行某事务块内的所有命令
3watch key…监视一个或多个key,如果在事务执行之前这些被监视的key被其他命令修改,这该事务则被取消
4unwatch取消watch命令对所有key的监视
5discard放弃执行事务

2、实例操作

Redis中的一个事务从开始到结束需要经历三个阶段:

声明事务

命令入队(一个或多个命令)

执行事务

下面通过实例来讲解一下上述命令的使用:

示例1:声明并执行事务

127.0.0.1:6379> multi   // 声明事务
OK
127.0.0.1:6379> set mykey transaction_test      // 命令1入队
QUEUED
127.0.0.1:6379> lpush mylist redis mysql transaction    // 命令2入队
QUEUED
127.0.0.1:6379> lrange mylist 0 -1      // 命令3入队
QUEUED
127.0.0.1:6379> exec    // 执行事务
1) OK
2) (integer) 3
3) 1) "transaction"
2) "mysql"
3) "redis"


实例2:取消事务

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set mykey 1
QUEUED
127.0.0.1:6379> incr mykey
QUEUED
127.0.0.1:6379> get mykey
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> exec
(error) ERR EXEC without MULTI
127.0.0.1:6379> get mykey
(nil)


示例3: 利用两个客户端演示watch命令

我们先在命令终端输入redis-cli,然后敲入以下命令:

127.0.0.1:6379> set mykey 1
OK
127.0.0.1:6379> get mykey
"1"
127.0.0.1:6379> watch mykey
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr mykey
QUEUED
127.0.0.1:6379> incr mykey
QUEUED


接着,我们又打开另一个命令终端,修改mykey的值为3,具体如下:

127.0.0.1:6379> get mykey
"1"
127.0.0.1:6379> set mykey 3
OK


最后,我们回到第一个终端,执行事务,可以看到之前multi声明的事务已经被取消。如下:

127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get mykey
"3"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: