Redis(五) 事务

一、简介

Redis的事务并没有关系型数据库的事务那么复杂,只有几个命令就可以解决:multi/exec/discard/watch/unwatch.

Redis 事务可以一次执行多个命令(允许在一次单独的步骤中执行一组命令), 并且带有以下两个重要的保证:

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

  • Redis会将一个事务中的所有命令序列化,然后按顺序执行;

  • 执行中不会被其它命令插入,不许出现加塞行为。

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

  • 开始事务

  • 命令入队

  • 执行事务

事务的错误处理:队列中的某个命令出现了报告错误,执行时整个的所有队列都会被取消。

二、命令

Redis 的事务是通过 MULTI,EXEC,DISCARD 和 WATCH 这四个命令来完成的。

①MULTI EXEC

一个事务的例子,它先以 MULTI 开始一个事务,然后将多个命令入队到事务中,最后由 EXEC 命令触发事务
(图)

  • 输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行

  • 直到输入Exec后,Redis会将之前的命令队列中的命令依次执行

②DISCARD放弃队列运行
(图)

  • 输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行

  • 直到输入Exec后,Redis会将之前的命令队列中的命令依次执行

  • 命令队列的过程中可以通过discard来放弃队列运行

③非队列执行阶段事务的错误处理

事务的错误处理:如果执行的某个命令报出了错误,则只有报错的命令不会被执行,而其它的命令都会执行,不会回滚。
在这里插入图片描述
在这里插入图片描述

④组队列中事务的错误处理

事务的错误处理:队列中的某个命令出现了报告错误,执行时整个的所有队列都会被取消。
在这里插入图片描述
在这里插入图片描述
由于之前的错误,事务执行失败

⑤事务的WATCH

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

Redis 不支持回滚(roll back)。

⑥事务的UNWATCH

Redis Unwatch命令用于取消 WATCH 命令对所有 key的监视。

如果在执行WATCH命令之后,EXEC命令或DISCARD命令先被执行的话,那就不需要再执行UNWATCH了。
在这里插入图片描述

正因为redis不支持回滚功能,才使得redis在事务上可以保持简洁和快速。

Redis官网也解释了自己为啥不支持回滚。简单来说就是Redis开发者们觉得没必要支持回滚,这样更简单便捷并且性能更好。Redis开发者觉得即使命令执行错误也应该在开发过程中就被发现而不是生产过程中。

你可以将Redis中的事务就理解为 :Redis事务提供了一种将多个命令请求打包的功能。然后,再按顺序执行打包的所有命令,并且不会被中途打断。

三、关于watch命令

watch类似乐观锁的实现,监视一个KEY,假如KEY的值中途有修改,会阻止这个事务的执行。

WATCH:当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的状态。注意:使用该命令可以实现 Redis 的乐观锁。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值