欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

加鎖方法和裝置與流程

文檔序號:12465121閱讀:452來源:國知局
加鎖方法和裝置與流程

本公開涉及數據處理技術領域,尤其涉及一種加鎖方法和裝置。



背景技術:

當不同系統(tǒng)或者同一個系統(tǒng)的不同主機之間共享了某數據時,可能會出現(xiàn)上述不同的系統(tǒng)或者主機同時訪問該數據造成數據不一致的問題,為了解決上述問題,需要對數據加鎖,該鎖的作用是當某主機訪問該數據時拒絕另一主機對該數據進行操作。

當數據已被一個主機加鎖時,其他主機需要等待鎖超時才能搶鎖,例如一種加鎖方法采用如下方式完成上述過程:獲取鎖的值,然后判斷鎖是否超時,如果鎖超時則進行搶鎖操作。

在上述過程中,可能在獲取鎖的值之前,該鎖已經被其他主機搶到并刪除,此時判斷鎖是否超時會報空指針異常,造成不必要的時間和空間的浪費。



技術實現(xiàn)要素:

為克服相關技術中存在的問題,本公開提供一種加鎖方法和裝置。

根據本公開實施例的第一方面,提供一種加鎖方法,所述方法包括:

獲取數據庫中目標對象的鎖的值;

判斷是否獲取到所述目標對象的鎖的值;

當獲取到所述目標對象的鎖的值時,根據所述目標對象的鎖的值判斷所述目標對象的鎖是否超時;

當所述目標對象的鎖超時時,對所述目標對象重新加鎖。

本公開通過在判斷所述目標對象的鎖是否超時之前,執(zhí)行判斷是否獲取到所述目標對象的鎖的值的操作,避免鎖已經被其他主機搶到并刪除時仍然判斷鎖是否超時出現(xiàn)的空指針異常,減少不必要的時間和空間的浪費去處理不能執(zhí)行完的業(yè)務,使得業(yè)務邏輯執(zhí)行的更加完整。

在本公開的一種實現(xiàn)方式中,所述獲取數據庫中目標對象的鎖的值,包括:

采用SETNX命令對所述目標對象進行加鎖操作;

在對所述目標對象加鎖失敗時,通過GET命令獲取所述目標對象的鎖的值。

在該實現(xiàn)方式中,獲取目標對象的值是在采用SETNX命令加鎖操作失敗時進行的,當采用SETNX命令加鎖操作失敗,表明此時目標對象已被加鎖,采用GET命令獲取數據庫中目標對象的鎖的值,確定是否超時,從而執(zhí)行后續(xù)操作。

在本公開的另一種實現(xiàn)方式中,所述方法還包括:

獲取采用所述SETNX命令對所述目標對象進行加鎖操作的返回值;

根據所述返回值,確定對所述目標對象加鎖是否成功。

在該實現(xiàn)方式中,通過采用SETNX命令進行加鎖操作得到返回值判斷,加鎖是否成功,簡單準確,為后續(xù)步驟提供執(zhí)行依據。

在本公開的另一種實現(xiàn)方式中,所述對所述目標對象重新加鎖,包括:

對所述目標對象執(zhí)行GETSET命令,所述GETSET命令用于獲取所述目標對象的鎖的值,并在未獲取到所述目標對象的鎖的值或者所述目標對象的鎖超時時,完成對所述目標對象的加鎖操作。

在該實現(xiàn)方式中,在執(zhí)行GETSET命令時,同樣增加判斷是否獲取到所述目標對象的鎖的值的操作,避免空指針異常報錯。

在本公開的另一種實現(xiàn)方式中,所述方法還包括:

當未獲取到所述目標對象的鎖的值時,或者當所述目標對象的鎖未超時時,在設定時間內進行休眠,并在休眠后重新獲取所述目標對象的鎖的值。

在該實現(xiàn)方式中,當目標對象字的鎖未超時,進行休眠操作,避免對目標對象重復加鎖。

在本公開的另一種實現(xiàn)方式中,所述方法還包括:

當對所述目標對象重新加鎖后,監(jiān)督在所述目標對象的鎖超時之后,所述目標對象的鎖是否被改動;如果在所述目標對象的鎖超時之后,所述目標對象的鎖沒有被改動,則刪除所述目標對象的鎖。

在刪除鎖時,通過判斷在判斷出目標對象的鎖超時之后,目標對象的鎖沒有被改動,避免鎖被其他主機獲取時產生的誤刪除操作。

根據本公開實施例的第二方面,提供一種加鎖裝置,所述裝置包括:

獲取模塊,用于獲取數據庫中目標對象的鎖的值;

判斷模塊,用于判斷是否獲取到所述目標對象的鎖的值;

處理模塊,用于當獲取到所述目標對象的鎖的值時,根據所述目標對象的鎖的值判斷所述目標對象的鎖是否超時;

當所述目標對象的鎖超時時,對所述目標對象重新加鎖。

在本公開的一種實現(xiàn)方式中,所述獲取模塊,用于:

采用SETNX命令對所述目標對象進行加鎖操作;

在對所述目標對象加鎖失敗時,通過GET命令獲取所述目標對象的鎖的值。

在本公開的另一種實現(xiàn)方式中,所述處理模塊,還用于:

獲取采用所述SETNX命令對所述目標對象進行加鎖操作的返回值;

根據所述返回值,確定對所述目標對象加鎖是否成功。

在本公開的另一種實現(xiàn)方式中,所述處理模塊,還用于:

對所述目標對象執(zhí)行GETSET命令,所述GETSET命令用于獲取所述目標對象的鎖的值,并在未獲取到所述目標對象的鎖的值或者所述目標對象的鎖超時時,完成對所述目標對象的加鎖操作。

在本公開的另一種實現(xiàn)方式中,所述處理模塊,還用于:

當未獲取到所述目標對象的鎖的值時,或者當所述目標對象的鎖未超時時,在設定時間內進行休眠,并在休眠后重新獲取所述目標對象的鎖的值。、

在本公開的另一種實現(xiàn)方式中,所述處理模塊,還用于:

當對所述目標對象重新加鎖后,監(jiān)督在所述目標對象的鎖超時之后,所述目標對象的鎖是否被改動;如果在所述目標對象的鎖超時之后,所述目標對象的鎖沒有被改動,則刪除所述目標對象的鎖。

根據本公開實施例的第三方面,提供一種加鎖裝置,所述裝置包括:

處理器;

用于存儲處理器可執(zhí)行指令的存儲器;

其中,所述處理器被配置為:

獲取數據庫中目標對象的鎖的值;

判斷是否獲取到所述目標對象的鎖的值;

當獲取到所述目標對象的鎖的值時,根據所述目標對象的鎖的值判斷所述目標對象的鎖是否超時;

當所述目標對象的鎖超時時,對所述目標對象重新加鎖。

本公開的實施例提供的技術方案可以包括以下有益效果:

本公開通過在判斷所述目標對象的鎖是否超時之前,執(zhí)行判斷是否獲取到所述目標對象的鎖的值的操作,避免鎖已經被其他主機搶到并刪除時仍然判斷鎖是否超時出現(xiàn)的空指針異常,減少不必要的時間和空間的浪費去處理不能執(zhí)行完的業(yè)務,使得業(yè)務邏輯執(zhí)行的更加完整。

應當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性和解釋性的,并不能限制本公開。

附圖說明

此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本發(fā)明的實施例,并與說明書一起用于解釋本發(fā)明的原理。

圖1是根據一示例性實施例示出的應用場景圖。

圖2是根據一示例性實施例示出的一種加鎖方法的流程圖。

圖3是根據一示例性實施例示出的一種加鎖方法的流程圖。

圖4是根據一示例性實施例示出的一種加鎖裝置的框圖。

圖5是根據一示例性實施例示出的一種加鎖裝置的框圖。

具體實施方式

這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。

為了便于實施例的描述,下面先簡單介紹一下本公開中實施例的應用場景。圖1是根據一示例性實施例示出的應用場景圖,參見圖1,該場景中網絡架構包括:數據庫層100、緩存層200、多個邏輯服務器300和多個客戶端400。每個邏輯服務器300可以連接多個客戶端400,多個邏輯服務器300同時對緩存層200中的數據進行操作,緩存層200中的數據可以定時同步到數據庫層100中。為了避免保持數據的一致性,需要對數據設置鎖。即一個邏輯服務器300可以通過對數據加鎖來保證該數據不被其他邏輯服務器操作。

其中,緩存層200可以使用Redis(英文REmote DIctionary Server)技術作為數據中間層,與數據庫層100形成主從庫分布,數據庫層100作永久存儲。其中,緩存層200和數據庫層100可以為互相隔離的服務器。Redis技術采用Key-Value實現(xiàn)數據存儲。

邏輯服務器300可以與客戶端400進行數據交互,接收客戶端400發(fā)送的業(yè)務請求,根據業(yè)務請求執(zhí)行相應地業(yè)務邏輯,在執(zhí)行業(yè)務邏輯時,對緩存層200中的數據進行操作。例如,在電商系統(tǒng)中,客戶端400請求發(fā)貨時,則邏輯服務器300執(zhí)行發(fā)貨邏輯,執(zhí)行發(fā)貨邏輯時,邏輯服務器300會對緩存層200中的貨物數量進行修改(數量減1)。而在執(zhí)行上述業(yè)務邏輯前,邏輯服務器300必須要獲得對相應數據進行操作的權限,為了獲得該權限就要執(zhí)行相應地加鎖過程,該過程由邏輯服務器300執(zhí)行,在接收到客戶端400發(fā)起的業(yè)務請求后,邏輯服務器300根據業(yè)務請求對相應地數據進行加鎖,以獲取權限,具體見本公開后文描述。

需要說明的是,以上所述的設備種類僅為舉例,本公開對此不作限制。

圖2是根據一示例性實施例示出的一種加鎖方法的流程圖,該方法基于Redis技術實現(xiàn),如圖2所示,該加鎖方法適用于前述場景中的邏輯服務器,包括以下步驟:

在步驟S11中,獲取數據庫中目標對象的鎖的值。

其中,目標對象為關鍵字。在緩存層和數據庫層等數據庫中數據通常采用關鍵字-值(Key-Value)的方式進行存儲,其中關鍵字可以是名稱、編號等。以前述貨物數量為例,關鍵字為數量,值為5。

目標對象的鎖用于限定目標對象對應的數據的訪問權限,該鎖可以包括兩個部分,例如鍵和值,鍵是一個標識(例如可以采用發(fā)送請求的客戶端的標識),值通常為超時時間。

在步驟S12中,判斷是否獲取到目標對象的鎖的值。

即判斷獲取到的目標對象的鎖的值是否為空(null),若獲取到的目標對象的鎖的值為空則表示未獲取到目標對象的鎖的值,若獲取到的目標對象的鎖的值不為空則表示獲取到目標對象的鎖的值。

在步驟S13中,當獲取到目標對象的鎖的值時,根據目標對象的鎖的值判斷目標對象的鎖是否超時。

目標對象的鎖的值可以為Unix時間戳,此時,判斷目標對象的鎖是否超時可以包括:將Unix時間戳轉換為對應的超時時間(例如北京時間),判斷當前時間是否超過其對應的超時時間,若當前時間超過超時時間則說明目標對象的鎖超時,當前時間未超過超時時間,則說明目標對象的鎖未超時。當前時間可以由邏輯服務器從本地或者網絡獲取到。例如,獲取到的Unix時間戳為1472968681,則其對應的北京時間為2016/9/4 13:58:01,若當前時間為2016/9/4 15:00:00,則說明該目標對象的鎖超時。

進一步地,當未獲取到目標對象的鎖的值時,在設定時間內進行休眠,并在休眠后重新獲取數據庫中目標對象的鎖的值。

在步驟S14中,當目標對象的鎖超時時,對目標對象重新加鎖。

其中,對目標對象重新加鎖后,該目標對象的鎖的鍵與本邏輯服務器對應,而對目標對象重新加鎖前,該目標對象的鎖的鍵與其他邏輯服務器對應。

對目標對象加鎖,可以防止目標對象對應的數據被其他邏輯服務器修改。

本公開通過在判斷目標對象的鎖是否超時之前,執(zhí)行判斷是否獲取到目標對象的鎖的值的操作,避免鎖已經被其他主機(如邏輯服務器)搶到并刪除時仍然判斷鎖是否超時出現(xiàn)的空指針異常,減少不必要的時間和空間的浪費,同時這樣做可以避免去處理不能執(zhí)行完的業(yè)務,使得業(yè)務邏輯執(zhí)行的更加完整。

在圖2示出的方法的基礎上,可選地,上述獲取數據庫中目標對象的鎖的值可以包括:

采用SETNX命令對目標對象進行加鎖操作;

在對目標對象加鎖失敗時,通過GET命令獲取目標對象的鎖的值。

其中,SETNX是SET if Not eXists的簡寫,意為如果目標對象不存在鎖則進行加鎖。

可選地,該方法還可以包括:

獲取采用SETNX命令對目標對象進行加鎖操作的返回值;

根據返回值,確定對目標對象加鎖是否加鎖。

例如返回值可以為1或0,1表示加鎖成功,0表示加鎖失敗。

可選地,上述對目標對象重新加鎖可以包括:

對目標對象執(zhí)行GETSET命令,GETSET命令用于獲取目標對象的鎖的值;在未獲取到目標對象的鎖的值或者目標對象的鎖超時時,對目標對象重新加鎖。

可選地,該方法還可以包括:

當未獲取到目標對象的鎖的值時,或者當目標對象的鎖未超時時,在設定時間內進行休眠,并在休眠后重新獲取目標對象的鎖的值。

其中,休眠是指邏輯服務器中執(zhí)行該加鎖方法的進程,在此設定時間內不對該數據的目標對象進行任何操作,直到超過設定時間。

可選地,該方法還可以包括:

當對目標對象重新加鎖后,監(jiān)督在目標對象的鎖超時之后,目標對象的鎖是否被改動;如果在目標對象的鎖超時之后,目標對象的鎖沒有被改動,則刪除目標對象的鎖。

圖3是根據一示例性實施例示出的一種加鎖方法的流程圖,該方法基于Redis技術實現(xiàn),采用關鍵字作為目標對象進行舉例說明,如圖3所示,該加鎖方法適用于前述場景中的邏輯服務器,包括以下步驟:

在步驟S201中,采用SETNX命令對關鍵字進行加鎖操作。

在緩存層和數據庫層等數據庫中數據通常采用關鍵字-值(Key-Value)的方式進行存儲,其中關鍵字可以是名稱、編號等。以前述貨物數量為例,關鍵字為數量,值為5。

其中,加鎖操作是指對緩存層中關鍵字-值中的關鍵字加鎖,以防止值被其他邏輯服務器修改。

其中,SETNX是SET if Not eXists的簡寫,意為如果關鍵字不存在鎖則進行加鎖。采用SETNX命令對關鍵字時,如果該關鍵字不存在鎖,則對該關鍵字進行加鎖,此時加鎖成功,如果該關鍵字存在鎖,則不對該關鍵字進行加鎖,此時加鎖失敗。

進一步地,在步驟S201之前,該方法還可以包括:

接收客戶端發(fā)送的業(yè)務請求;根據業(yè)務請求確定對應的關鍵字。

根據業(yè)務請求確定對應的關鍵字可以包括:確定業(yè)務請求對應的業(yè)務邏輯;確定業(yè)務邏輯所對應的關鍵字。例如,客戶端發(fā)送的是發(fā)貨請求,則其對應于發(fā)貨邏輯,發(fā)貨邏輯對應的關鍵字包括貨物數量。

在步驟S202中,獲取采用SETNX命令對關鍵字進行加鎖操作的返回值,根據返回值,確定對關鍵字加鎖是否成功。當加鎖失敗時,執(zhí)行步驟S203。當加鎖成功時,則已完成對關鍵字的加鎖操作。

該返回值用于表示加鎖操作是否成功,例如如果返回值為第一數值,則此時加鎖成功,結束加鎖流程;如果返回值為第二數值,則此時加鎖失敗,執(zhí)行步驟S203。

其中,第一數值包括但不限于1,第二數值包括但不限于0。

在步驟S203中,通過GET命令獲取關鍵字的鎖的值。

其中,GET命令的作用是獲取關鍵字的鎖。加鎖失敗說明該關鍵字已經被加鎖,通過GET命令獲取關鍵字的鎖的值。

在步驟S204中,判斷是否獲取到關鍵字的鎖的值,當未獲取到關鍵字的鎖的值時,執(zhí)行步驟S207,當獲取到關鍵字的鎖的值時,執(zhí)行步驟S205。

判斷是否獲取到關鍵字的鎖的值,也即判斷獲取的關鍵字的鎖的值是否為空,獲取到的關鍵字的鎖的值為空則表示未獲取到關鍵字的鎖的值,若獲取到的關鍵字的鎖的值不為空則表示獲取到關鍵字的鎖的值。

由于步驟S203和步驟S204是在步驟S201中采用SETNX命令對關鍵字進行加鎖失敗時執(zhí)行的,說明在步驟S201采用SETNX命令對關鍵字進行加鎖時,該關鍵字已被加鎖,而在這種前提下,如果步驟S203未獲取到該關鍵字的鎖的值,說明該關鍵字的鎖被其他邏輯服務器刪除,此時如果仍然對該關鍵字進行加鎖等操作,可能會因為其他邏輯服務器也在對該關鍵字進行加鎖操作,造成該關鍵字同時被兩個邏輯服務器加鎖,因此,當未獲取到關鍵字的鎖的值時,執(zhí)行步驟S209的休眠操作。

在步驟S205中,根據關鍵字的鎖的值判斷關鍵字的鎖是否超時,當關鍵字的鎖未超時時,執(zhí)行步驟S207,當關鍵字的鎖超時時,執(zhí)行步驟S206。

獲取到關鍵字的鎖的值Value 1用于表示該鎖的超時時間,通常采用時間戳表示。

此時,判斷關鍵字的鎖是否超時可以包括:將Unix時間戳轉換為對應的超時時間,判斷當前時間是否超過其對應的超時時間(例如北京時間),若超過則說明關鍵字的鎖超時,否則未超時。當前時間可以由邏輯服務器從本地或者網絡獲取到。

例如,獲取到的Unix時間戳為1472968681,則其對應的北京時間為2016/9/4 13:58:01,若當前時間為2016/9/4 15:00:00,則說明該關鍵字的鎖超時。

其中,上述時間戳對應的超時時間可以考慮業(yè)務執(zhí)行所需時間進行設置,例如1毫秒。

在步驟S206中,對關鍵字執(zhí)行GETSET命令,GETSET命令用于獲取關鍵字的鎖的值,當未獲取到關鍵字的鎖的值或者獲取到的關鍵字的鎖超時時,完成對關鍵字的加鎖操作;當獲取到的關鍵字的鎖未超時時,執(zhí)行步驟S207

其中,GETSET與GET相比包含了獲取鎖的值和在鎖的值為null或超時時對關鍵字進行加鎖兩個動作。

因此,對關鍵字執(zhí)行GETSET命令,包括:

步驟2061,獲取關鍵字的鎖的值Value 2。

步驟2062,判斷是否獲取到關鍵字的鎖的值;當未獲取到關鍵字的鎖的值時,完成對關鍵字的加鎖操作,當獲取到關鍵字的鎖的值時,執(zhí)行步驟2063。

步驟2063,根據關鍵字的鎖的值判斷關鍵字的鎖是否超時;當關鍵字的鎖超時時,完成對關鍵字的加鎖操作,當關鍵字的鎖未超時時,執(zhí)行步驟S207。

在步驟S207中,在設定時間內進行休眠,并在休眠后重新獲取關鍵字的鎖的值。

其中,休眠是指邏輯服務器中執(zhí)行該加鎖方法的進程,在此時間內不對該數據的關鍵字進行任何操作,直到超過設定時間。休眠時間可以根據關鍵字對應的數據對應的業(yè)務進行設置,例如可以設置為10ms或20ms。

上述步驟S201-S207可以采用如下代碼實現(xiàn):

其中,foo表示關鍵字。

在步驟S208中,加鎖成功后,執(zhí)行操作指令。

加鎖成功后,邏輯服務器會執(zhí)行業(yè)務邏輯,比如發(fā)貨。

在步驟S209中,操作指令執(zhí)行完畢后,通過GET命令獲取關鍵字的鎖的值。

通過GET命令獲取關鍵字的鎖的值Value 3。

在步驟S210中,判斷是否獲取到關鍵字的鎖的值;當獲取到關鍵字的鎖的值時,執(zhí)行步驟S211,當未獲取到關鍵字的鎖的值時,則結束流程。

在步驟S211中,根據關鍵字的鎖的值判斷關鍵字的鎖是否超時;當根據Value 1判斷關鍵字的鎖超時時,執(zhí)行步驟S212。

如果關鍵字的鎖未超時,既可以刪除該關鍵字的鎖,也可以不執(zhí)行任何動作。

在步驟S212中,監(jiān)督在目標對象的鎖超時之后,目標對象的鎖是否被改動;如果在目標對象的鎖超時之后,目標對象的鎖沒有被改動,則刪除目標對象的鎖;如果在目標對象的鎖超時之后,目標對象的鎖被改動,則不刪除目標對象的鎖。

其中,監(jiān)督在目標對象的鎖超時之后,目標對象的鎖是否被改動可以采用WATCH命令實現(xiàn),WATCH命令在步驟S211之后且步驟S212之前開啟,即該方法還可以包括:采用WATCH命令對關鍵字的鎖進行監(jiān)督。

上述步驟S208-S212可以采用如下代碼實現(xiàn):

doYourJob()

value3=get lock.foo

if(value3!=null&&now()>get lock.foo){

watch lock.foo

multi

del lock.foo

exec

}

上述代碼通過watch-multi-exec事務原語實現(xiàn),如果被監(jiān)督(watch)的關鍵字被改動,則multi和exec之間的操作(del lock.foo)不會被執(zhí)行,如果被監(jiān)督的關鍵字未被改動,則執(zhí)行該操作,也即刪除關鍵字的鎖。

本公開通過在判斷關鍵字的鎖是否超時之前,執(zhí)行判斷是否獲取到關鍵字的鎖的值的操作,避免鎖已經被其他主機搶到并刪除時仍然判斷鎖是否超時出現(xiàn)的空指針異常,減少不必要的時間和空間的浪費去處理不能執(zhí)行完的業(yè)務,使得業(yè)務邏輯執(zhí)行的更加完整。并且在上述搶鎖過程中,包括兩次獲取鎖的值的過程,避免在第一次判斷超時進行加鎖,此時該關鍵字已被其他主機加鎖的情況,避免關鍵字同時被兩個主機加鎖,提高了獨占性。另外,在刪除鎖時,通過判斷在判斷出關鍵字的鎖超時之后,關鍵字的鎖沒有被改動,避免鎖被其他主機獲取時產生的誤刪除操作。

圖4是根據一示例性實施例示出的一種加鎖裝置的框圖,該加鎖裝置可以為邏輯服務器或邏輯服務器的一部分,如圖4所示,該裝置包括:

獲取模塊301,用于獲取數據庫中目標對象的鎖的值;

判斷模塊302,用于判斷是否獲取到目標對象的鎖的值;

處理模塊303,用于當獲取到目標對象的鎖的值時,根據目標對象的鎖的值判斷目標對象的鎖是否超時;

當目標對象的鎖超時時,對目標對象重新加鎖。

可選地,獲取模塊301,用于:

采用SETNX命令對目標對象進行加鎖操作;

在對目標對象加鎖失敗時,通過GET命令獲取目標對象的鎖的值。

可選地,處理模塊303,還用于:

獲取采用SETNX命令對目標對象進行加鎖操作的返回值;

根據返回值,確定對目標對象加鎖是否成功。

可選地,處理模塊303,還用于:

對目標對象執(zhí)行GETSET命令,GETSET命令用于獲取目標對象的鎖的值,并在未獲取到目標對象的鎖的值或者目標對象的鎖超時時,完成對目標對象的加鎖操作。

可選地,處理模塊303,還用于:

當未獲取到目標對象的鎖的值時,或者當目標對象的鎖未超時時,在設定時間內進行休眠,并在休眠后重新獲取目標對象的鎖的值。

可選地,獲取模塊301,用于:

當對目標對象重新加鎖后,監(jiān)督在目標對象的鎖超時之后,目標對象的鎖是否被改動;如果在目標對象的鎖超時之后,目標對象的鎖沒有被改動,則刪除目標對象的鎖。

關于上述實施例中的裝置,其中各個模塊執(zhí)行操作的具體方式已經在有關該方法的實施例中進行了詳細描述,此處將不做詳細闡述說明。

圖5是根據一示例性實施例示出的一種加鎖裝置1900的框圖,例如,裝置1900可以被提供為一服務器。參照圖5,裝置1900包括處理組件1922,其進一步包括一個或多個處理器,以及由存儲器1932所代表的存儲器資源,用于存儲可由處理組件1922的執(zhí)行的指令,例如應用程序。存儲器1932中存儲的應用程序可以包括一個或一個以上的每一個對應于一組指令的模塊。此外,處理組件1922被配置為執(zhí)行指令,以執(zhí)行上述方法,該方法包括:

獲取數據庫中目標對象的鎖的值;

判斷是否獲取到目標對象的鎖的值;

當獲取到目標對象的鎖的值時,根據目標對象的鎖的值判斷目標對象的鎖是否超時;

當目標對象的鎖超時時,對目標對象重新加鎖。

在本公開的一種實現(xiàn)方式中,獲取數據庫中目標對象的鎖的值,包括:

采用SETNX命令對目標對象進行加鎖操作;

在對目標對象加鎖失敗時,通過GET命令獲取目標對象的鎖的值。

在本公開的另一種實現(xiàn)方式中,方法還包括:

獲取采用SETNX命令對目標對象進行加鎖操作的返回值;

根據返回值,確定對目標對象加鎖是否成功。

在本公開的另一種實現(xiàn)方式中,對目標對象重新加鎖,包括:

對目標對象執(zhí)行GETSET命令,GETSET命令用于獲取目標對象的鎖的值,并在未獲取到目標對象的鎖的值或者目標對象的鎖超時時,對目標對象重新加鎖。

在本公開的另一種實現(xiàn)方式中,該方法還包括:

當未獲取到目標對象的鎖的值時,或者當目標對象的鎖未超時時,在設定時間內進行休眠,并在休眠后重新獲取目標對象的鎖的值。

在本公開的另一種實現(xiàn)方式中,該方法還包括:

當對目標對象重新加鎖后,監(jiān)督在目標對象的鎖超時之后,目標對象的鎖是否被改動;如果在目標對象的鎖超時之后,目標對象的鎖沒有被改動,則刪除目標對象的鎖。

裝置1900還可以包括一個電源組件1926被配置為執(zhí)行裝置1900的電源管理,一個有線或無線網絡接口1950被配置為將裝置1900連接到網絡,和一個輸入輸出(I/O)接口1958。裝置1900可以操作基于存儲在存儲器1932的操作系統(tǒng),例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,F(xiàn)reeBSDTM或類似。

本領域技術人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本發(fā)明的其它實施方案。本申請旨在涵蓋本發(fā)明的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本發(fā)明的一般性原理并包括本公開未公開的本技術領域中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本發(fā)明的真正范圍和精神由下面的權利要求指出。

應當理解的是,本發(fā)明并不局限于上面已經描述并在附圖中示出的精確結構,并且可以在不脫離其范圍進行各種修改和改變。本發(fā)明的范圍僅由所附的權利要求來限制。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
长垣县| 和顺县| 察雅县| 黔东| 滦南县| 邓州市| 水城县| 威信县| 文成县| 彩票| 凤山市| 东乌| 静海县| 长阳| 瑞丽市| 水富县| 育儿| 繁峙县| 婺源县| 灯塔市| 天峻县| 丰城市| 长乐市| 伽师县| 荔浦县| 兰州市| 新密市| 凯里市| 辽阳市| 临潭县| 专栏| 深圳市| 都安| 中阳县| 陆川县| 金山区| 将乐县| 萝北县| 邻水| 德保县| 尼勒克县|