所謂 Redis 的并發(fā)競爭 Key 的問題也就是多個系統(tǒng)同時對一個 key 進(jìn)行操作,但是最后執(zhí)行的順序和我 們期望的順序不同,這樣也就導(dǎo)致了結(jié)果的不同!
推薦一種方案:分布式鎖(zookeeper 和 Redis 都可以實現(xiàn)分布式鎖)。(如果不存在 Redis 的并發(fā)競爭 Key 問 題,不要使用分布式鎖,這樣會影響性能)
基于zookeeper臨時有序節(jié)點可以實現(xiàn)的分布式鎖。大致思想為:每個客戶端對某個方法加鎖時,在 zookeeper上的 與該方法對應(yīng)的指定節(jié)點的目錄下,生成一個唯一的瞬時有序節(jié)點。 判斷是否獲取鎖的 方式很簡單,只需要判斷有 序節(jié)點中序號最小的一個。 當(dāng)釋放鎖的時候,只需將這個瞬時節(jié)點刪除即 可。同時,其可以避免服務(wù)宕機(jī)導(dǎo)致的鎖 無法釋放,而產(chǎn)生的死鎖問題。完成業(yè)務(wù)流程后,刪除對應(yīng)的 子節(jié)點釋放鎖。
在實踐中,當(dāng)然是從以可靠性為主。所以首推Zookeeper。
浙公網(wǎng)安備 33010602011771號