咱們來看上面那張圖,現在某個客戶端要加鎖。如果該客戶端面對的是乙個 redis cluster 集 群,他首先會根據 hash 節點擊擇一台機器。這裡注意,僅僅只是選擇一台機器!這點很關 鍵!緊接著,就會傳送一段 lua 指令碼到 redis 上,那段 lua 指令碼如下所示:
為啥要用 lua 指令碼呢?因為一大坨複雜的業務邏輯,可以通過封裝在 lua 指令碼中傳送給 redis, 保證這段複雜業務邏輯執行的原子性。
那麼,這段 lua 指令碼是什麼意思呢?這裡 keys[1]代表的是你加鎖的那個 key,比如說:rloc k lock = redisson.getlock(「mylock」);這裡你自己設定了加鎖的那個鎖 key 就是「mylock」。
ar**[1]代表的就是鎖 key 的預設生存時間,預設 30 秒。ar**[2]代表的是加鎖的客戶端的 i d,類似於下面這樣:8743c9c0-0795-4907-87fd-6c719a6b4586:1
給大家解釋一下,第一段 if 判斷語句,就是用「exists mylock」命令判斷一下,如果你要加鎖 的那個鎖 key 不存在的話,你就進行加鎖。如何加鎖呢?很簡單,用下面的命令:hset myloc k
8743c9c0-0795-4907-87fd-6c719a6b4586:1 1,通過這個命令設定乙個 hash 資料結構,這行 命令執行後,會出現乙個類似下面的資料結構:
上述就代表「8743c9c0-0795-4907-87fd-6c719a6b4586:1」這個客戶端對「mylock」這個鎖 key 完 成了加鎖。接著會執行「pexpire mylock 30000」命令,設定 mylock 這個鎖 key 的生存時間 是 30 秒。好了,到此為止,ok,加鎖完成了。
原子操作以及加鎖機制
一 原子操作 不可被中斷的乙個或一系列操作。二 處理器如何實現原子操作 32位處理器使用基於對快取加鎖或匯流排加鎖的方式來實現多處理器之間的原子操作 1 匯流排鎖 使用處理器提供乙個lock 訊號,當乙個處理器在匯流排上輸出此訊號的時候,其他處理器的請求將被阻塞,那麼該處理器可以獨佔使用共享記憶體。...
Mysql事務以及加鎖機制
事務的特徵acid,即原子性 一致性 隔離性 永續性。原子性保證乙個事務為乙個最小的單元,內部不可分割 一致性保證事務中的每個操作執行緒不可單獨提交,成功則一起提交,不成功則事務回滾 隔離性保證不同事務間看到的資料檢視相互獨立,相互隔離 隔離級別可設定 永續性保證事務提交後資料會持久的儲存下來 sq...
Redis細節積累
redis細節積累 一 優點 二 缺點 三 redis複製缺陷的解決方案 我們可以採用主動複製的方式來搭建我們的集群環境,所謂主動複製是指由業務端或者通過 中介軟體對redis儲存的資料進行雙寫或多寫,通過資料的多份儲存來達到與複製相同的目的。但是會造成資料一致性問題,這樣需要看專案的應用場景是否對...