Redis事务

Posted sd880413

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis事务相关的知识,希望对你有一定的参考价值。

redis事务可以一次执行多个命令,并且带有以下两个重要的保证:

1、批量操作在发送exec命令前被放入队列缓存。

2、收到exec命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。

3、在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历一下三个阶段:

(1)开始事务

(2)命令入队

(3)执行事务。

 

实例:一下是一个事务的例子,它现已MULTI开始一个事务,然后将多个命令入队到事务中,最后exec命令触发事务,一并执行事务中的所有命令:

技术分享图片
 1 127.0.0.1:6379> multi
 2 OK
 3 127.0.0.1:6379> set book_name "english"
 4 QUEUED
 5 127.0.0.1:6379> get book_name
 6 QUEUED
 7 127.0.0.1:6379> sadd tag "C++" "Python" "Java" "C" "c#"
 8 QUEUED
 9 127.0.0.1:6379> smembers tag
10 QUEUED
11 127.0.0.1:6379> exec
12 1) OK
13 2) "english"
14 3) (integer) 5
15 4) 1) "C"
16    2) "Python"
17    3) "Java"
18    4) "C++"
19    5) "c#"
20 127.0.0.1:6379> keys *
21 1) "tag"
22 2) "book_name"
View Code

 

redis事务命令

discard命令

该命令用于取消事务,放弃执行事务块内的所有命令。

discard命令基本语法:discard

返回值:总是返回OK

实例:

技术分享图片
 1 127.0.0.1:6379> multi
 2 OK
 3 127.0.0.1:6379> ping
 4 QUEUED
 5 127.0.0.1:6379> set greeting "hello"
 6 QUEUED
 7 127.0.0.1:6379> discard #执行discard命令,事务块内的所有命令放弃执行
 8 OK
 9 127.0.0.1:6379> exec  #执行discard命令后,在执行exec命令报错
10 (error) ERR EXEC without MULTI
View Code

 

exec命令

用于执行素有事务块内的命令

exec命令基本语法:exec

返回值:事务块内所有命令的返回值,按命令执行的先后顺序排列,当操作被打断时,返回空值nil.

实例:

技术分享图片
 1 127.0.0.1:6379> multi
 2 OK
 3 127.0.0.1:6379> incr user_id
 4 QUEUED
 5 127.0.0.1:6379> incr user_id
 6 QUEUED
 7 127.0.0.1:6379> incr user_id
 8 QUEUED
 9 127.0.0.1:6379> ping
10 QUEUED
11 127.0.0.1:6379> exec
12 1) (integer) 1
13 2) (integer) 2
14 3) (integer) 3
15 4) PONG
16 127.0.0.1:6379> keys *
17 1) "user_id"
18 127.0.0.1:6379> get user_id
19 "3"
View Code

 

multi命令

该命令用于标记一个事务块的开始,事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由exec命令原子性(atomic)地执行。

基本语法:multi

返回值:总是返回OK

实例:

技术分享图片
 1 127.0.0.1:6379> multi
 2 OK
 3 127.0.0.1:6379> incr user_id
 4 QUEUED
 5 127.0.0.1:6379> incr user_id
 6 QUEUED
 7 127.0.0.1:6379> incr user_id
 8 QUEUED
 9 127.0.0.1:6379> ping
10 QUEUED
11 127.0.0.1:6379> exec
12 1) (integer) 1
13 2) (integer) 2
14 3) (integer) 3
15 4) PONG
View Code

 

UNwatch命令

命令用于取消watch命令对所有key的监视。

基本语法:UNwatch

返回值:总是返回OK

实例:

技术分享图片
1 127.0.0.1:6379> watch lock lock_times
2 OK
3 127.0.0.1:6379> unwatch
4 OK
View Code

 

watch命令

watch命令用于监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。

基本语法:watch  key  【key...】

返回值:总是返回OK

实例:

 1 127.0.0.1:6379> watch lock lock_times 2 OK 

 

以上是关于Redis事务的主要内容,如果未能解决你的问题,请参考以下文章

Redis源代码分析(十七)--- multi事务操作

redis代码解析-事务

Redis事务入门及命令

19 事务 相关操作

19 事务 相关操作

Redis事务入门及命令