Redis笔记 Redis中的事务
Posted Fred^_^
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis笔记 Redis中的事务相关的知识,希望对你有一定的参考价值。
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50675302
在【Redis学习笔记】前面几篇文章中,我们简单介绍了Redis中的五种数据结构相关的命令,今天,我们来介绍一下Redis中的事务Transaction。
一、什么是事务
如果你之前接触过mysql、Oracle等数据库,一定听说过“事务”的概念。所谓事务,是指作为单个逻辑工作单元执行的一系列操作,要么全部完全地执行,要么全部都不执行。Redis中“事务”的概念与诸如上述的数据库中“事务”一致,可以一次性执行多个Redis命令,并保证以下两点:
- 事务是一个单独的隔离操作:一个事务中的命令逐一按顺序执行。
- 事务是一个原子性操作:原子性就意味着一个事务中的所有命令要么全部执行,要么全都不执行。
二、Redis中事务操作
1、相关命令介绍
Redis提供了五个与事务相关的命令:
序号 | 命令 | 功能 |
---|---|---|
1 | multi | 标识一个事务的开始 |
2 | exec | 执行某事务块内的所有命令 |
3 | watch key… | 监视一个或多个key,如果在事务执行之前这些被监视的key被其他命令修改,这该事务则被取消 |
4 | unwatch | 取消watch命令对所有key的监视 |
5 | discard | 放弃执行事务 |
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"
以上是关于Redis笔记 Redis中的事务的主要内容,如果未能解决你的问题,请参考以下文章