1. 程式人生 > >Redis-List命令和Zset有序集合命令的併發原子性原理

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