零号工作者 2023-11-07 09:05 采纳率: 0%
浏览 9
已结题

MySQL和redis事务问题

mysql的事务机制到什么时候结束?

今天排查一个问题时发现,执行完MySQL的操作后,执行剩余的redis操作,我的设想是当redis操作失败抛出异常后,MySQL应该执行回滚,但实际上MySQL并没有回滚。是因为MySQL在执行完操作后事务就已经提交了吗,还是说redis的一些事务机制问题不会引起事务回滚。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-07 10:04
    关注

    【相关推荐】



    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7708106
    • 这篇博客也不错, 你可以看下MySQL操作成功之后Redis操作失败的回滚问题
    • 您还可以看一下 CSDN讲师老师的分布式爬虫之数据存储开发实战课程中的 1_redis写入mysql小节, 巩固相关知识点
    • 除此之外, 这篇博客: MySQL - 深入理解 MySQL 的事务和隔离级别中的 5.3 Redis 的事务可以实现一致性吗? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      Redis 的事务,不支持回滚,所以我自身持有的观点,是认为它不能实现对应 MySQL 同等意义的 ACID,这与《Redis设计与实现》所持有的观点稍有不同。

      我们可以说 Redis 可以实现 ACID 的 I,但不能实现ACD,为什么呢?

      • 支持隔离性

      因为Redis的事务可以保证一个客户端一个事务内部的多个操作之间不被其他客户端的操作或同客户端非同事务操作插入,所以他能保证一定程度的事务隔离性;

      • 不支持原子性

      Redis的事务无法回滚,所以无法做到要么都成功,要么都失败

      • 不支持一致性

      因为不支持原子性,所以也无法满足事务的一致性,比如一个场景,用户A要给用户B转200块钱,所以事务中有两个操作,操作A将用户A的余额-200,操作B将用户B的余额+200,但是操作A如果某种原因失败了,因为不支持回滚,所以操作B正确进行而且成功了。那么用户A没有扣钱,而用户B却凭空的多了200块钱

      • 不支完整的持久性

      虽然Redis支持持久化,但因为Redis的持久化是异步的,无论是RDB还是AOF的方式,Redis都无法保证将某个时间点的数据一字不差的完全持久化。如果某个时刻Redis崩溃,总是有丢失一小段时间的数据的可能


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月14日
  • 创建了问题 11月7日

悬赏问题

  • ¥15 100 内验证哥德巴赫巴赫猜想
  • ¥15 需要在vitis下实现彩调视频图像累加,并输出
  • ¥15 解决不了的LNK2019错误
  • ¥20 MATLAB仿真三相桥式全控整流电路
  • ¥15 EDA技术关于时序电路设计
  • ¥15 百度文心一言流式返回sse失败
  • ¥15 由于远程方已关闭传输流,身份验证失败
  • ¥15 rt-detr,PCB,目标检测
  • ¥15 有偿求指导实证代码。cfps清洗合并后,无论是构建平衡面板还是非平衡面板,都是只剩几百个样本量。求指导一下哪里出问题了,不要潦草回复
  • ¥15 mutlinichenet