栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis6 十二:Redis中的事务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis6 十二:Redis中的事务

十、Redis_ 事务

Redis事务的本质 是一组命令的集合 ,并且有如下三个保证

  • 事务中的所有命令都会序列化、按顺序地执行。

  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。

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

Redis事务的主要作用就是串联多个命令防止别的命令插队。

Redis事务不保证原子性: Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其 余的命令仍会被执行。

1.redis什么情况用到事务?

redis本身是不会存在并发问题的,因为他是单进程的,再多的command都是one by one执行的。我们使用的时候,可能会出现并发问题,比如get和set这一对。

因为,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有
一个线程。客户端访问之间存在竞争。

因为存在多客户端并发,所以尽量必须保证一组操作的原子性。比如银行卡扣款问题,获取余额,判断,扣款,写回就必须构成事务,否则就可能出错。

2. Multi、Exec、Discard命令

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

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

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

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

操作举例:

​ 组队、执行

​ 组队、放弃组队

3. 事务的错误处理
  1. 组队过程中某个命令出现了错误,执行时整个队列的所有命令都会被取消

  2. 组队过程没有出现错误,执行过程某个命令出了错误,只有报错的命令不会被执行,而其他的命令都会执行,不会回滚

    即:Redis的事务不保证原子性

操作举例:

组队过程中,有失败命令

组队过程没有失败,执行过程中有失败

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998745.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号