本申請適用于信息安全技術領域,提供一種基于分布式鎖的數據回滾方法、裝置、終端設備和存儲介質。該方法包括:向分布式系統的服務器集群發送上鎖請求;在接收到由所述服務器集群基于所述上鎖請求返回的分布式鎖后,向指定的緩存數據庫寫入所述分布式鎖的第一上鎖信息,所述第一上鎖信息包含所述分布式鎖的標識、上鎖時間以及第一客戶端的標識;在執行完與所述分布式鎖對應的任務線程之后,從所述緩存數據庫中查找與所述分布式鎖對應且上鎖時間最晚的第二上鎖信息;若所述第二上鎖信息中包含的客戶端標識不是所述第一客戶端的標識,則對與所述任務線程相關的數據進行回滾。采用該方法能夠解決現有分布式鎖技術的紅鎖方案中可能產生的臟數據問題。中可能產生的臟數據問題。中可能產生的臟數據問題。
Data rollback method, device, device and storage medium based on distributed lock
【技術實現步驟摘要】
基于分布式鎖的數據回滾方法、裝置、設備和存儲介質
[0001]本申請涉及信息安全
,提供一種基于分布式鎖的數據回滾方法、裝置、終端設備和存儲介質。
技術介紹
[0002]分布式鎖是控制分布式系統中各客戶端同步訪問共享資源的一種方式。在使用Redis做分布式鎖的時候,服務器集群若采用主從模式,則在主節點發生故障,集群節點執行主從切換的時候,有可能出現分布式鎖丟失的問題。
[0003]針對該問題,現有技術提出一種紅鎖的解決方案,即服務器集群設置多個主節點,客戶端同時向該多個主節點發送上鎖請求,只要一半以上的主節點通過請求,則該客戶端上鎖成功。
[0004]然而,采用紅鎖仍然存在以下問題:當某個客戶端A獲得鎖之后,若發生了線程停頓(例如一次很長時間的網絡堵塞或波動)且該停頓超過了該鎖的過期時間,則另一個客戶端B就可以獲得該鎖,從而完成相應的數據操作;此后,當客戶端A的線程恢復之后,仍然會將之后的數據操作執行完,此時有可能產生臟數據等問題。
技術實現思路
[0005]有鑒于此,本申請提出一種基于分布式鎖的數據回滾方法、裝置、終端設備和存儲介質,旨在解決現有技術的紅鎖方案中可能產生的臟數據問題。
[0006]第一方面,本申請實施例提供了一種基于分布式鎖的數據回滾方法,應用于第一客戶端,所述第一客戶端為分布式系統具有的多個客戶端中的任意一個客戶端,該方法包括:
[0007]向所述分布式系統的服務器集群發送上鎖請求;
[0008]在接收到由所述服務器集群基于所述上鎖請求返回的分布式鎖后,向指定的緩存數據庫寫入所述分布式鎖的第一上鎖信息,所述第一上鎖信息包含所述分布式鎖的標識、上鎖時間以及所述第一客戶端的標識;所述多個客戶端中的每個客戶端在接收到所述服務器集群分配的分布式鎖后,都會往所述緩存數據庫寫入相應的上鎖信息;
[0009]在執行完與所述分布式鎖對應的任務線程之后,從所述緩存數據庫存儲的所有上鎖信息中查找與所述分布式鎖對應且上鎖時間最晚的第二上鎖信息;
[0010]若所述第二上鎖信息中包含的客戶端標識不是所述第一客戶端的標識,則對與所述任務線程相關的數據進行回滾。
[0011]在本申請實施例中,首先由某個第一客戶端向服務器集群發送上鎖請求;當第一客戶端基于該上鎖請求獲得對應的分布式鎖后,向指定的緩存數據庫寫入該分布式鎖的第一上鎖信息,該第一上鎖信息包含該分布式鎖的標識、上鎖時間和第一客戶端的標識;第一客戶端在執行完相應的任務線程之后,從該緩存數據庫中查找與該分布式鎖對應且上鎖時間最晚的第二上鎖信息;若該第二上鎖信息中包含的客戶端標識不是第一客戶端的標識,
則第一客戶端對該任務線程相關的數據進行回滾。通過這樣設置,假設第一客戶端在執行任務線程中發生了線程停頓導致分布式鎖超期,而另外一個第二客戶端已獲得該分布式鎖,則第一客戶端在執行完線程后,會發現從緩存數據庫中查找到的第二上鎖信息中包含的客戶端標識是第二客戶端的標識(第二客戶端在獲得該分布式鎖后,與第一客戶端一樣,會向該緩存數據庫寫入該分布式鎖的上鎖信息,其中包含時間更晚的上鎖時間以及第二客戶端的標識,顯然第一客戶端查找到的第二上鎖信息為第二客戶端寫入的上鎖信息),此時第一客戶端會對任務線程相關的數據進行回滾,從而避免產生臟數據等問題。
[0012]在本申請實施例的一種實現方式中,所述第一上鎖信息包含的上鎖時間可以通過以下方式確定:
[0013]查詢所述緩存數據庫中是否已存在與所述分布式鎖對應的其它上鎖信息;
[0014]若所述緩存數據庫中已存在與所述分布式鎖對應的其它上鎖信息,則查找所述其它上鎖信息中包含的最晚上鎖時間,并將所述最晚上鎖時間和指定時長之和確定為所述第一上鎖信息包含的上鎖時間;
[0015]若所述緩存數據庫中不存在與所述分布式鎖對應的其它上鎖信息,則將所述第一客戶端當前的時鐘時間確定為所述第一上鎖信息包含的上鎖時間。
[0016]在本申請實施例的一種實現方式中,所述對與所述任務線程相關的數據進行回滾,可以包括:
[0017]接收由所述服務器集群發送的第二客戶端的優先級信息,所述第二客戶端為所述多個客戶端中與所述第二上鎖信息中包含的客戶端標識對應的客戶端;
[0018]將所述第二客戶端的優先級信息和所述第一客戶端的優先級信息進行比較,得到所述第一客戶端和所述第二客戶端之間的優先級大小;
[0019]若所述第一客戶端的優先級小于所述第二客戶端,則對與所述任務線程相關的數據進行回滾。
[0020]進一步的,在得到所述第一客戶端和所述第二客戶端之間的優先級大小之后,還可以包括:
[0021]若所述第一客戶端的優先級大于所述第二客戶端,則不執行對與所述任務線程相關的數據進行回滾的操作,并發送數據回滾指令至所述第二客戶端,所述數據回滾指令用于指示所述第二客戶端對其獲取所述分布式鎖期間執行操作的數據進行回滾。
[0022]在本申請實施例的一種實現方式中,在從所述緩存數據庫存儲的所有上鎖信息中查找與所述分布式鎖對應且上鎖時間最晚的第二上鎖信息之后,還可以包括:
[0023]若所述第二上鎖信息中包含的客戶端標識是所述第一客戶端的標識,則判斷與所述任務線程相關的數據是否為預定義的核心數據;
[0024]若與所述任務線程相關的數據不是預定義的核心數據,則不執行對與所述任務線程相關的數據進行回滾的操作;
[0025]若與所述任務線程相關的數據是預定義的核心數據,則在釋放所述分布式鎖的階段向所述服務器集群發送第一釋放鎖請求,所述第一釋放鎖請求用于指示所述服務器集群檢測所述分布式鎖是否仍在所述第一客戶端上,若所述分布式鎖仍在所述第一客戶端上則執行釋放鎖的流程,若所述分布式鎖不在所述第一客戶端上則返回第一異常信息至所述第一客戶端;
[0026]在接收到所述第一異常信息之后,對與所述任務線程相關的數據進行回滾。
[0027]在本申請實施例的一種實現方式中,在從所述緩存數據庫存儲的所有上鎖信息中查找與所述分布式鎖對應且上鎖時間最晚的第二上鎖信息之后,還可以包括:
[0028]若所述第二上鎖信息中包含的客戶端標識是所述第一客戶端的標識,則獲取所述第一客戶端的性能數據;
[0029]若所述性能數據不符合預設的數據回滾性能需求,則不執行對與所述任務線程相關的數據進行回滾的操作;
[0030]若所述性能數據符合預設的數據回滾性能需求,則在釋放所述分布式鎖的階段向所述服務器集群發送第二釋放鎖請求,所述第二釋放鎖請求用于指示所述服務器集群檢測所述分布式鎖是否仍在所述第一客戶端上,若所述分布式鎖仍在所述第一客戶端上則執行釋放鎖的流程,若所述分布式鎖不在所述第一客戶端上則返回第二異常信息至所述第一客戶端;
[0031]在接收到所述第二異常信息之后,對與所述任務線程相關的數據進行回滾。
[0032]在本申請實施例的一種實現方式中,所述第一上鎖信息還包含所述分布式鎖的過期時間,在從所述緩存數本文檔來自技高網...
【技術保護點】
【技術特征摘要】
1.一種基于分布式鎖的數據回滾方法,應用于第一客戶端,所述第一客戶端為分布式系統具有的多個客戶端中的任意一個客戶端,其特征在于,所述方法包括:向所述分布式系統的服務器集群發送上鎖請求;在接收到由所述服務器集群基于所述上鎖請求返回的分布式鎖后,向指定的緩存數據庫寫入所述分布式鎖的第一上鎖信息,所述第一上鎖信息包含所述分布式鎖的標識、上鎖時間以及所述第一客戶端的標識;所述多個客戶端中的每個客戶端在接收到所述服務器集群分配的分布式鎖后,都會往所述緩存數據庫寫入相應的上鎖信息;在執行完與所述分布式鎖對應的任務線程之后,從所述緩存數據庫存儲的所有上鎖信息中查找與所述分布式鎖對應且上鎖時間最晚的第二上鎖信息;若所述第二上鎖信息中包含的客戶端標識不是所述第一客戶端的標識,則對與所述任務線程相關的數據進行回滾。2.如權利要求1所述的數據回滾方法,其特征在于,所述第一上鎖信息包含的上鎖時間通過以下方式確定:查詢所述緩存數據庫中是否已存在與所述分布式鎖對應的其它上鎖信息;若所述緩存數據庫中已存在與所述分布式鎖對應的其它上鎖信息,則查找所述其它上鎖信息中包含的最晚上鎖時間,并將所述最晚上鎖時間和指定時長之和確定為所述第一上鎖信息包含的上鎖時間;若所述緩存數據庫中不存在與所述分布式鎖對應的其它上鎖信息,則將所述第一客戶端當前的時鐘時間確定為所述第一上鎖信息包含的上鎖時間。3.如權利要求1所述的數據回滾方法,其特征在于,所述對與所述任務線程相關的數據進行回滾,包括:接收由所述服務器集群發送的第二客戶端的優先級信息,所述第二客戶端為所述多個客戶端中與所述第二上鎖信息中包含的客戶端標識對應的客戶端;將所述第二客戶端的優先級信息和所述第一客戶端的優先級信息進行比較,得到所述第一客戶端和所述第二客戶端之間的優先級大小;若所述第一客戶端的優先級小于所述第二客戶端,則對與所述任務線程相關的數據進行回滾。4.如權利要求3所述的數據回滾方法,其特征在于,在得到所述第一客戶端和所述第二客戶端之間的優先級大小之后,還包括:若所述第一客戶端的優先級大于所述第二客戶端,則不執行對與所述任務線程相關的數據進行回滾的操作,并發送數據回滾指令至所述第二客戶端,所述數據回滾指令用于指示所述第二客戶端對其獲取所述分布式鎖期間執行操作的數據進行回滾。5.如權利要求1所述的數據回滾方法,其特征在于,在從所述緩存數據庫存儲的所有上鎖信息中查找與所述分布式鎖對應且上鎖時間最晚的第二上鎖信息之后,還包括:若所述第二上鎖信息中包含的客戶端標識是所述第一客戶端的標識,則判斷與所述任務線程相關的數據是否為預定義的核心數據;若與所述任務線程相關的數據不是預定義的核心數據,則不執行對與所述任務線程相關的數據進行回滾的操作;若與所述任務線程相關的數據是預定義的核心數據,則在釋放所述分布式鎖的階段向
所述服務器集群發送第一釋放鎖請求,所述第一釋放鎖請求用于指示所述服務器集群檢測所述分布式鎖是否仍在...
【專利技術屬性】
技術研發人員:王國濤,
申請(專利權)人:未鯤上海科技服務有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。