一、Redis-List命令和Zset有序集合命令的并发原子性原理
这个并发原则处理的过程是要基于当前的key在客户端发生了并发产生了阻塞才会执行,
否者会返回NULL不做处理,多个命令并发操作这个KEY,就可能产生阻塞
db->blocking_keys 字典维护的哈希表,存放客户端阻塞的KEY
db->ready_keys 字典维护的哈希表,存放客户端阻塞的KEY
server.ready_keys 一个链表队列,用来后面异步顺序执行命令操作
1.当客户端执行lpush和zadd命令的时候 如果当前的key对应的集合LIST或者有序集合的话且当前db->blocking_keys 存在阻塞的话。
2.然后把当前的操作放入db->ready_keys的dict里面。
3.最后会把这个操作放在server.ready_keys 的链表队列,后面会通过handleClientsBlockedOnLists()异步循环这个队列执行命令操作,达到顺序执行,避免并发执行产生的问题。
这样就防止了并发出现的数据不一致。
二、当是集群REDIS,会同步到其他机器
三、源码截图
1