• Redis6 十二:Redis中的事务


    十、Redis_ 事务

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

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

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

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

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

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

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

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

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

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

    2. Multi、Exec、Discard命令

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

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

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

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

    在这里插入图片描述

    操作举例:

    ​ 组队、执行

    在这里插入图片描述

    ​ 组队、放弃组队

    在这里插入图片描述

    3. 事务的错误处理

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

      在这里插入图片描述

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

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

      在这里插入图片描述

    操作举例:

    组队过程中,有失败命令

    在这里插入图片描述

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

    在这里插入图片描述

  • 相关阅读:
    2022年软件测试经典面试真题
    驱动开发:通过Async反向与内核通信
    超级细胞丨爆款游戏公司Supercell组织敏捷化是如何实现的
    UNI-APP中如何通过配置访问代理,解决跨域问题
    休闲零食混战:三只松鼠“守淘”,良品铺子“攻抖”
    Redis (主从复制,哨兵模式,集群)概述及部署
    python字符与字典、列表相互转换
    limux入门3—磁盘与分区管理
    好用的VsCode 插件备忘录
    java刷题day 04
  • 原文地址:https://blog.csdn.net/weixin_52797128/article/details/125521466