Redis-List命令和Zset有序集合命令的并发原子性原理

一、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

猜你喜欢

转载自blog.csdn.net/luolaifa000/article/details/84108465