Redis实战-Redis事务

作者: 擦普洱 | 来源:发表于2019-06-02 10:21 被阅读13次

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

  • 开始事务
  • 命令入队
  • 执行事务

1.使用MULTI 开始一个事务
2.批量操作在发送 EXEC 命令前被放入队列缓存。
3.收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

Redis事务常用命令:

命令 用例和描述
MULTI 标记一个事务块的开始
EXEC 执行所有事务块内的命令
DISCARD 取消事务,放弃执行事务块内的所有命令
WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
UNWATCH 取消 WATCH 命令对所有 key 的监视

实例:

#使用multi标记一个事务的开始
127.0.0.1:6379> multi
OK
#设置一个key-value
127.0.0.1:6379> set key1 SUNDAY
QUEUED
127.0.0.1:6379> set key2 XI~AN
QUEUED
127.0.0.1:6379> set key3 PLAY
QUEUED
#执行当前事务
127.0.0.1:6379> exec
1) OK
2) OK
3) OK
#查看刚才插入的键值
127.0.0.1:6379> get key1
"SUNDAY"
127.0.0.1:6379> get key2
"XI~AN"
127.0.0.1:6379> get key3
"PLAY"
127.0.0.1:6379>

同时咱们也可以使用Redis的可视化工具Redis Desktop Manager工具查看刚才插入redis中的数据:

image.png

下一节将介绍Redis Desktop Manager 的安装及使用

DISCARD命令的使用

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a 1
QUEUED
127.0.0.1:6379> set b 2
QUEUED
127.0.0.1:6379> set c 3
QUEUED
# 取消事务,放弃执行事务块内的所有命令
127.0.0.1:6379> DISCARD
OK
127.0.0.1:6379>

WATCH 和UNWATCH
这两个命令使用在开启事务之前,watch可以监视key的动态,当被监视的key被其他命令改动,那么当前的事务将会终止,unwatch取消监听对象。

# 监听上述key1的值
127.0.0.1:6379> watch key1
OK
# 查看当前key1的值
127.0.0.1:6379> get key1
"wednesday"
# 修改key1的值为a
127.0.0.1:6379> set key1 a
OK
# 开始事务
127.0.0.1:6379> multi
OK
# 在事务中修改key1的值为2
127.0.0.1:6379> set key1 2
QUEUED
#执行事务,发现执行失败
127.0.0.1:6379> exec
(nil)
# 获取key1的值,发现还是在开启事务之前的a
127.0.0.1:6379> get key1
"a"
127.0.0.1:6379>

WATCH命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一直持续到EXEC命令(事务中的命令是在EXEC之后才执行的,所以在EXEC命令后可以修改WATCH监控的键值),同时使用UNWATCH可以取消监控,这里就不再赘述了。

Redis保证一个事务中的所有命令要么都执行,要么都不执行。如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行。而一旦客户端发送了EXEC命令,所有的命令就都会被执行,即使此后客户端断线也没关系,因为Redis中已经记录了所有要执行的命令。除此之外,Redis的事务还能保证一个事务内的命令依次执行而不被其他命令插入。试想客户端A需要执行几条命令,同时客户端B发送了一条命令,如果不使用事务,则客户端B的命令可能会插入到客户端A的几条命令中执行。如果不希望发生这种情况,也可以使用事务。

不怕从零开始,只怕从未启程!

参考文献:
菜鸟教程:https://www.runoob.com/redis/redis-keys.html
《Redis实战》Josiah L. Carlson著

相关文章

  • Redis实战-Redis事务

    Redis的事务从开始到执行会经历以下三个阶段: 开始事务 命令入队 执行事务 1.使用MULTI 开始一个事务2...

  • 九、Redis 事务

    Redis 事务 Redis事务描述: Redis事务允许在单个步骤中执行一组命令。以下是Redis事务的两个属性...

  • Redis事务

    转载自Redis之Redis事务 Redis事务的概念: Redis 事务的本质是一组命令的集合。事务支持一次执行...

  • redis系列(十):事务

    redis有事务么? redis官方说是有事务的。但这个事务不是我们普遍理解的mysql事务。 redis的事务不...

  • Redis事务

    redis事务机制 Redis事务与传统关系型事务的比较

  • redis中的事物、消息订阅、持久化

    Redis 中的事务 Redis支持简单的事务 Redis与 mysql事务的对比 注: rollback与dis...

  • JavaGuide知识点整理——Redis面试题总结(下)

    Redis事务 如何使用Redis事务? Redis可以通过multi,exec,discard和watch等命令...

  • Redis简单操作记录

    Redis事务 1.Redis事务本质:一组命令的集合,加入队列,然后执行,执行完事务结束。 redis事务: ①...

  • Redis学习笔记:事务

    Redis学习笔记:事务 原文链接:Redis学习笔记:事务 一、事务的描述 和MySQL一样,Redis中也有事...

  • redis 常用指令

    Redis 的事务 Redis 的事务处理与 RDBMS 的事务有一些不同。首先 Redis 不支持事务的回滚机制...

网友评论

    本文标题:Redis实战-Redis事务

    本文链接:https://www.haomeiwen.com/subject/tewtxctx.html