写点什么

Redis--Redis 事务及错误处理方式

作者:Java学术趴
  • 2022 年 10 月 06 日
    北京
  • 本文字数:1065 字

    阅读完需:约 3 分钟

Redis--Redis事务及错误处理方式

👨‍🎓作者:Java 学术趴

🏦仓库:GithubGitee

✏️博客:CSDN掘金InfoQ云+社区

💌公众号:Java 学术趴

🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。

🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号 Java 学术趴联系小编。


☠️每日毒鸡汤:一件事你犹豫去不去做,那就是该立即动身做的。

1. Redis 中的事务

1.1 Redis 事务介绍

  • Redis 事务是一个单独的隔离操作:事务中的所有命令都会被序列化、按顺序地执行。事务在执行过程中,不会被其他客户端发送来的命令请求打断。

  • Redis 事务的主要作用:串联多个事务,防止命令插队。


Redis 中的事务:就是把所有要执行的操作都按照顺序排列起来,按照顺序一个个的执行,每一个操作的执行不会干扰到其他操作。

1.2 Multi、Exec、discard

  • 从输入 Mulit 命令开始,输入的命令都会依次进入命令队列中,但不会执行。直到输入 Exec 之后,Redis 回将之前的命令队列中的命令依次执行。

  • 组队的过程中可以通过 discard 来放弃组队。

  • Exec :类似于 Mysql 中的提交事务, discard : 类似于 Mysql 中的回滚事务。


创建一个事务分为三步:


  1. 开始事务

  2. 编写命令

  3. 提交/回滚事务


编写一个事务提交成功的流程



编写一个事务回滚的流程


1.3 Redis 中事务的错误处理

第一种:在组队中,如果某个命令出现错误,执行时整个队列中的命令都会被取消



第二种:如果执行阶段某个命令出现了错误,则只有出现错误的命令不会被执行,而其他的命令都会执行。


1.4 使用事务解决冲突问题

1.4.1 使用悲观锁的方式

悲观锁:顾名思义,就是很悲观的锁,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据的就会 block ,知道它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制。比如:行锁、表锁、读锁、写锁等等,都是在操作之前先上锁。


1.4.2 使用乐观锁的方式

乐观锁:顾名思义,就是很乐观的锁,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号的机制。乐观锁适用于多读的场景,这样可以提高吞吐量, Redis 就是利用这种 check-and-set 机制实现事务的。


1.5 Redis 事务三特性

  • 单独的隔离操作 : 事务中的所有命令都会序列化、按顺序地执行。事务在执行过程中,不会被其他客户端发过来的请求所打断。

  • 没有隔离级别的概念 :队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行。

  • 不保证原子性 : 事务中如果有一条命令执行失败,其后的命令任然会被执行,没有回滚。

用户头像

Java学术趴

关注

还未添加个人签名 2022.07.02 加入

还未添加个人简介

评论

发布
暂无评论
Redis--Redis事务及错误处理方式_10月月更_Java学术趴_InfoQ写作社区