Redis集群模式incr保证原子性的原理

发布时间 2023-10-31 09:03:28作者: Silentdoer

1.主要是redis的key会解析到固定的主机上,比如集群上有host1,host2,host3;然后key1可能会解析后发现是要发到host2上,则在host2正常的情况下(有点像kafka rebalance;consumer处理哪些分区),key1会一直在host2上进行操作;

因此在redis集群正常情况下不会出现对key1第一次incr是在host2,第二次是host1,然后这个时候三个实例之间的数据还没有同步完导致对key1的两次incr返回的都是同一个值;

但是如果是redis状态异常则可能出现问题(包括集群某个实例下线或者某个实例增加,都会导致rebalance,即原先key1是host2来处理,可能变成host1了),比如如果此时down掉了一个实例

是host2,那么down的时候可能host2的数据还没有同步到其他实例上,这个时候key1经过新的“Rebalance”需要放到host1上去处理,可能就会导致两次incr得到的是相同的数据;

 

而如果是增加了实例,那新增的实例显然后面也是需要提供服务的,所以也会造成key1的“rebalance”(如果这个是客户端行为那应该是可以避免)