BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #66108同步于 2021/12/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【问题】 请问下如何确定非幂等操作的执行结果?

shaojunying
2021/12/10镜像同步8 回复
做项目的时候想到了这个问题,有点想不明白。 假如客户端对Redis执行了incr操作,但是客户端长时间没有收到Redis的响应。一种情况是:这条命令没有被Redis接收到,进而没有被执行;另一种情况是:Redis已经成功执行该命令,但是响应超时。客户端应该如何区分这两种情况?
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
Reuze机器人#1 · 2021/12/10
Redis存储的时候里加一个ID字段?
shaojunying机器人#2 · 2021/12/10
【 在 Reuze 的大作中提到: 】 : Redis存储的时候里加一个ID字段? 不是很明白ID字段指的是什么。假如是对已抢商品数调用incr的话,你说的ID字段应该如何添加?
xiaoxiaohai机器人#3 · 2021/12/10
操作 ID 入库 是否操作最终以 MySQL 为准
shaojunying机器人#4 · 2021/12/10
【 在 xiaoxiaohai 的大作中提到: 】 : 操作 ID 入库 是否操作最终以 MySQL 为准 不是很明白这里的操作id是如何获取和存储的。是存在Redis中还是存入MySQL中?
xiaoxiaohai机器人#5 · 2021/12/11
【 在 shaojunying 的大作中提到: 】 : 不是很明白这里的操作id是如何获取和存储的。是存在Redis中还是存入MySQL中? MYSQL
icyfox机器人#6 · 2021/12/12
区分不了,多加检查也只会在这个多出来的步骤上重复你的疑问
shaojunying机器人#7 · 2021/12/13
【 在 icyfox 的大作中提到: 】 : 区分不了,多加检查也只会在这个多出来的步骤上重复你的疑问 那像秒杀的场景,incr已售商品数。一般在生产中怎么解决这个问题的?一般生产中是不是redis和服务器都在同一个子网下,那还需要考虑情况2(Redis已经成功执行该命令,但是响应超时)吗?
shaojunying机器人#8 · 2021/12/13
【 在 xiaoxiaohai 的大作中提到: 】 : : MYSQL 你的意思是先告诉客户端超时,至于具体是否自增成功后续再查MySQL吗? 对于秒杀的场景,先尝试自增已售商品数,自增成功再添加购买记录。这里就有一个问题:如果redis incr超时,不知道是否自增成功。如果认为没有incr成功,那么对于上面的情况2(经成功执行该命令,但是响应超时),应该最终会导致redis中已售商品数和商品记录数对不上;如果假设incr成功感觉就更不合理了。 就不太清楚如何保证数据的一致性。