redis分布式锁-基本概念与实现方式对比
1、redis中使用WATCH實現鎖機制,是最次之的方式。WATCH只會在數據被其他客戶端搶先修改了的情況下,“通知”執行了這個命令的客戶端,而不會阻止其他客戶端對數據進行修改。此類鎖成為“樂觀鎖”
2、redis提供SETNX命令確實具有基本的加鎖功能,但他的功能并不完整,并且也不具備分布式鎖常見的一些高級特性。
3、自己構建分布式鎖。
4、鎖不正確運行的癥狀
1、持有鎖的進程因為操作時間過長而導致鎖自動釋放,但進程本身并不知曉,甚至還可能會錯誤的釋放了其他進程持有的鎖。
2、一個持有鎖并打算執行長時間操作的進程已經崩潰,但其他想要獲取鎖的進程并不知道哪個進程持有鎖,也無法檢測出持有鎖的進程是否崩潰,只能白白的浪費時間等待鎖被釋放
3、在一個進程持有的鎖過期之后,其他多個進程同時嘗試去獲取鎖,并且都獲得了鎖。
4、多個進程獲得了同一個鎖,而每個進程都以為自己是唯一獲得鎖的進程。
因為Redis在最新的硬件上可以每秒執行100 000 個操作,甚至 225 000 個操作,所以盡管上面提到的問題出現的幾率只有萬分之一,但在高負載的情況下還是可能出現
5、判斷應該鎖住整個數據結構還是應該鎖住結構中一小部分,是一件非常簡單的事情,但是,需要鎖住一小部分數據不止一份的時候,有或者需要鎖住結構中的多個部分的時候,這種判斷就會更加困難。多個細粒度鎖也有引發死鎖的危險,導致程序無法運行。
轉載于:https://www.cnblogs.com/jiangtao1218/p/9349627.html
總結
以上是生活随笔為你收集整理的redis分布式锁-基本概念与实现方式对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式锁的实现概述
- 下一篇: 基于词典的前缀扫描中文分词