欢迎光临
我们一直在努力

Redis事务涉及的watch、multi等命令详解

Redis是一个开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,它常被用作数据库、缓存和消息中间件,在Redis中,事务是一组命令的集合,这些命令要么全部执行,要么全部不执行。

1. Redis事务的基本概念

Redis事务主要涉及以下三个命令:

MULTI:标记一个事务块的开始。

EXEC:执行所有事务块内的命令。

DISCARD:取消事务,放弃执行事务块内的所有命令。

2. WATCH命令

WATCH命令用于在事务开始之前监视任意数量的键,如果在事务执行之前这些键的值发生了变化,那么事务将被中断。

语法:

WATCH key [key ...]

示例:

> WATCH mykey
OK

3. MULTI命令

MULTI命令用于开启一个事务,它总是返回OK,MULTI之后的所有命令都会进入队列中,等待EXEC命令来执行。

语法:

MULTI

示例:

> MULTI
OK

4. EXEC命令

EXEC命令用于执行所有在MULTI之后进入到队列的命令,当调用EXEC时,进入队列的命令会按顺序执行,每次调用EXEC时,每个由MULTI和WATCH命令保护的键都会被重新观察一次,如果有键的值在事务开始之后发生了改变,那么所有监视这个键的后续命令都不会被执行,如果所有命令都被成功执行,那么EXEC返回OK,否则返回空值nil。

语法:

EXEC

示例:

> MULTI
OK
> SET mykey "Hello"
QUEUED
> EXEC
OK
1) OK    表示mykey的值被成功设置为了"Hello"

5. DISCARD命令

DISCARD命令用于取消事务,放弃执行事务块内的所有命令,如果正在使用WATCH命令监视某个(或某些)键,那么取消所有监视的键,如果当前没有事务在进行,DISCARD命令不做任何事情并返回OK,如果正在运行事务,那么该命令会先取消所有的监控键,然后中断事务并返回OK,注意,如果调用DISCARD时有未提交的事务,那么DISCARD不会回滚任何已经作出的改变,要强制回滚所有未提交的改变,需要调用ABORT命令。

语法:

DISCARD [key [key ...]]

示例:

> MULTI
OK
> SET mykey "Hello"    此时mykey的值被设置为"Hello",但还未真正写入到Redis服务器中,因为还没有调用EXEC命令来执行这个操作。
QUEUED    表示mykey的值被成功设置为了"Hello",但还未真正写入到Redis服务器中,因为还没有调用EXEC命令来执行这个操作。
> DISCARD    取消所有监视的键,并中断事务,此时mykey的值不会被真正写入到Redis服务器中,因为还没有调用EXEC命令来执行这个操作。
未经允许不得转载:九八云安全 » Redis事务涉及的watch、multi等命令详解