[發明專利]構建用于Redis數據庫的分布式鎖的方法有效
| 申請號: | 201910583604.6 | 申請日: | 2019-07-01 |
| 公開(公告)號: | CN110287206B | 公開(公告)日: | 2021-04-27 |
| 發明(設計)人: | 李長彬 | 申請(專利權)人: | 四川新網銀行股份有限公司 |
| 主分類號: | G06F16/23 | 分類號: | G06F16/23 |
| 代理公司: | 成都智言知識產權代理有限公司 51282 | 代理人: | 濮云杉 |
| 地址: | 610094 四川省成都市成都*** | 國省代碼: | 四川;51 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 構建 用于 redis 數據庫 分布式 方法 | ||
本發明涉及構建用于Redis數據庫的分布式鎖的方法,包括:A.在RabbitMQ中創建死信交換機和直連交換機,以及創建死信隊列和分布式鎖隊列,將死信隊列和死信交換機綁定,分布式鎖隊列分別與死信交換機分別和直連交換機綁定;B.定義基于Redssion的用于獲取分布式鎖和釋放分布式鎖的工具類;C.定義死信隊列的消費者類;D.調用工具類中的加鎖方法,得到加鎖是否成功的結果;E.加鎖成功,則執行業務代碼;加鎖失敗,退出執行業務代碼;F.鎖釋放。本發明能夠滿足高并發場景中的性能訴求,并且解決了基于Redis數據庫的鎖失效時間機制,以及失效時間設置過長或過短導致鎖提前釋放等問題,實現了實現高可用性。
技術領域
本發明涉及分布式系統中分布式鎖的構建方法,具體講是構建用于Redis數據庫的分布式鎖的方法。
背景技術
在分布式應用的場景下,有時需要保證一個資源在同一時間內只能被同一個操作方修改,因此就引入了分布式鎖的概念和技術。為了實現分布式鎖,目前比較常用的幾種方式為:
1.基于數據庫實現分布式鎖:
步驟:
1)在數據庫中創建一張鎖表,用于記錄每個線程對應持有的鎖;
2)獲取鎖的時候,向鎖表中增加一條記錄;
3)釋放鎖的時候,刪除這條記錄;
缺點:
1)性能不能滿足高并發場景的訴求;
2)為了提高可用性,解決單點問題,需要兩臺數據庫,并互為主備,運維難度高;
3)為了實現阻塞鎖,需要不斷嘗試直到成功,這種方式驗證浪費服務資源;
4)為了實現可重入鎖,需要記錄機器信息、線程信息,操作繁瑣復雜;
5)為了解決死鎖,需要記錄鎖失效時間,做一個定時任務,每隔一定時間把數據庫超時的數據清理掉,增量了工作量而且也不能做到即時釋放鎖資源;
2.基于zookeeper(一種分布式的、開放源碼的分布式應用程序協調服務)實現分布式鎖:
步驟:
1)在zookeeper對于指定節點的目錄下,生成一個唯一的瞬時有序節點;
2)獲取鎖的時候,只需要判斷有序節點中序號最小的一個;
3)釋放鎖的時候,將這個瞬時節點刪除即可;
缺點:
1)性能較低,不能滿足高并發場景的訴求;
3.基于Redis(一種開源的數據庫)實現分布式鎖:
步驟:
1)調用RedissonClient的tryLock方法來實現獲取鎖;
2)調用RedissonClient的unlock方法實現釋放鎖;
缺點:
1)基于Redis的失效時間(Time To Live)機制,在服務宕機的情況下,可以自動釋放鎖。但是失效時間設置多長不好確定,如果設置的時間太短,方法沒執行完,鎖就自動釋放了,那么就會導致并發問題。如果設置的時間太長,其他需要獲取鎖的線程有可能需要多等一段時間。
發明內容
本發明提供了一種構建用于Redis數據庫的分布式鎖的方法,以降低死鎖風險、解決鎖提前釋放等問題、提高并發性能、實現高可用性(High Availability)。
本發明構建用于Redis數據庫的分布式鎖的方法,包括:
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于四川新網銀行股份有限公司,未經四川新網銀行股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910583604.6/2.html,轉載請聲明來源鉆瓜專利網。





