Redis 第5章 事务

本文详细介绍了Redis的事务机制,包括事务的简介、常用命令、常见演示,特别是事务的执行流程和错误处理。同时,文章讨论了Redis中的锁策略,包括悲观锁和乐观锁的概念,指出Redis采用乐观锁策略以适应其多读少写的场景。最后,提到了在事务中如何使用WATCH进行加锁以及解锁的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5事务

1. 事务简介

  1. Redis中事务,不同于传统的关系型数据库中的事务。
  2. Redis中的事务指的是一个单独的隔离操作。
  3. Redis的事务中的所有命令都会序列化、按顺序地执行且不会被其他客户端发送来的命令请求所打断。
  4. Redis事务的主要作用是串联多个命令防止别的命令插队

2. 事务常用命令

MULTI

标记一个事务块的开始

EXEC

执行事务中所有在排队等待的指令并将链接状态恢复到正常 当使用WATCH 时,只有当被监视的键没有被修改,且允许检查设定机制时,EXEC会被执行

DISCARD

刷新一个事务中所有在排队等待的指令,并且将连接状态恢复到正常。

如果已使用WATCH,DISCARD将释放所有被WATCH的key。

WATCH

标记所有指定的key 被监视起来,在事务中有条件的执行(乐观锁)

 

3. 事务的常见演示

3.1 简单组队

MULTI开启组队,EXEC依次执行队列中的命令。

 

DISCARD中途取消组队

3.2 组队失败

3.2.1 自作自受

此种情况,语法符合规范,Redis只有在执行中,才可以发现错误。而在Redis中,并没有回滚机制,因此错误的命令,无法执行,正确的命令会全部执行!

3.2.2 殃及池鱼

在编译的过程中,Redis检测出来了错误的语法命令,因此它认为这条组队,一定会发生错误,因此全体取消;

3.3.3 官方说明

4. 锁

4.1 悲观锁

 

执行操作前假设当前的操作肯定(或有很大几率)会被打断(悲观)。基于这个假设,我们在做操作前就会把相关资源锁定,不允许自己执行期间有其他操作干扰。

Redis不支持悲观锁。Redis作为缓存服务器使用时,以读操作为主,很少写操作,相应的操作被打断的几率较少。不采用悲观锁是为了防止降低性能。

4.2 乐观锁

执行操作前假设当前操作不会被打断(乐观)。基于这个假设,我们在做操作前不会锁定资源,万一发生了其他操作的干扰,那么本次操作将被放弃。

5. Redis中的锁策略

    1. Redis采用了乐观锁策略(通过watch操作)。乐观锁支持读操作,适用于多读少写的情况!
    2. 在事务中,可以通过watch命令来加锁;使用 UNWATCH可以取消加锁;
    3. 如果在事务之前,执行了WATCH(加锁),那么执行EXEC 命令或 DISCARD 命令后,锁对自动释放,即不需要再执行 UNWATCH 了

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值