Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 147|回复: 1

2 Redis模式下如何实现事务机制?

[复制链接]

2

主题

2

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2023-4-9 06:41:55 | 显示全部楼层 |阅读模式
类似MySQL的事务,Redis 事务一次性可以执行多个指令, 而这多个指令通过以下的方式来保证:
  • EXEC 命令执行之前,所有的指令都是被暂存(Queued)在队列中;
  • Service端接收到EXEC命令后开始执行事务,事务中某些命令执行失败,其余命令依旧执行;
  • 在事务执行的时候具备隔离性,其他Client端执 购买电话号码列表 行的指令不会乱入到当前指令的执行顺序中的。
3.1 原子性(Atomicity)
在事务执行的过程中,可能遇到这几种命令执行错误:
  • 在执行 EXEC 命令前,指令本身错误:
    • 参数数量不一致构成的错误

    • 命令名称构成的错误,使用了不存在或者错误的命令:比如上面的 'UPD'
    • 超过MaxMemory内存限制,导致内存不足
  • 在执行 EXEC 命令后,命令的不合理操作导致的失败。比如数据类型不匹配(对 String 类型 的 value 执行了 INCR 或者 DECR 之类的操作)
  • 在执行事务的 EXEC 命令时,实例故障导致的失败,这种情况比较少一点。
3.1.1 EXEC 执行前报错
执行前错误是指命令入队(Queue)时,Redis 就会发现并记录报错。
即使执行了 EXEC命令之后,Redis也会拒绝执行指令队列中的所有指令,返回事务失败的结果。
这样一来,所有的指令都不会被执行,保持了原子性。下面是指令入队列的报错的实例,跟上面的举例一致:

回复

使用道具 举报

0

主题

505

帖子

1014

积分

金牌会员

Rank: 6Rank: 6

积分
1014
发表于 2023-4-24 01:00:51 | 显示全部楼层
好好好好好好好好好好好好好好好好好顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2024-11-26 19:58 , Processed in 0.038567 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表