顶一个!我也有相同的问题,只是稍微有点不同。
个人浅见:正常情况下集群方式也不会影响原子性的。
集群方式有两种:sentinel和cluster。
sentiel是一主多从的结构,也就是说永远只有一个主节点负责写,由于只有一个节点负责写,那其实和单机redis其实是一样的。
cluster的话是一个主从切片模式,就是有n个主切片,每个主个切片有m个从切片,但是某个key的集合只能在某个特定的主切片以及它的m个从切片上,而这m+1个切片中m个从切片是只读的,写还是只能在那个唯一的主切片上。所以其实所有请求还是只对一个切片节点进行写操作。
所以正常情况下我理解不论sentinel还是cluster的原子性都是没问题的。
但是我觉得需要担心的是在秒杀活动的时候发生了节点的主从切换。假设有总库存6个,要是甲(买1个)、乙(买2个)、丙(买4个)三个人的请求甲和乙在主节点上执行好了,在执行丙操作的时候发生了主从切换,原先的从节点升级为主节点,并且由于种种原因这个新的主节点还未刷新到原来主节点宕机前最后的状态(也就是甲和乙的扣减动作还未更新到从节点上),此时丙会发现剩下库存还是6个而不是6-1-2=3个,会继续扣减库存,这样会不会出现超卖的现象?老师,请问这种问题如何处理啊?