郭 璇, 周 浩, 羅文輝
(武漢理工大學(xué) 自動(dòng)化學(xué)院, 武漢 430070)
基于OCC-DA-MCP算法的Redis并發(fā)控制
郭 璇*, 周 浩, 羅文輝
(武漢理工大學(xué) 自動(dòng)化學(xué)院, 武漢 430070)
該文以提高Redis內(nèi)存數(shù)據(jù)庫的并發(fā)性能為目的,通過研究現(xiàn)有的內(nèi)存數(shù)據(jù)庫并發(fā)控制算法,然后結(jié)合Redis架構(gòu),設(shè)計(jì)并實(shí)現(xiàn)了基于OCC-DA-MCP算法的Redis并發(fā)控制.仿真結(jié)果表明,該算法在一定程度上改善了現(xiàn)有Redis并發(fā)控制算法存在的浪費(fèi)的執(zhí)行和不必要的重啟等問題.
并發(fā)控制; Redis; 內(nèi)存數(shù)據(jù)庫
Redis(Remote Dictionary Server),是一個(gè)使用ANSI C語言編寫、基于鍵值對(Key-Value)數(shù)據(jù)存儲的內(nèi)存數(shù)據(jù)庫[1],并能夠提供多種語言的API.Redis的應(yīng)用非常的廣泛,目前國內(nèi)的大型互聯(lián)網(wǎng)公司如新浪、淘寶,國外的Fickr、Github等均在使用Redis的緩存服務(wù)[2].
并發(fā)控制是指在多線程數(shù)據(jù)請求下,保證數(shù)據(jù)庫一致性和完整性的機(jī)制.由于Redis是一種單線程機(jī)制的內(nèi)存數(shù)據(jù)庫,理論上來說不存在并發(fā)和鎖的概念,高并發(fā)對同一個(gè)鍵的操作會(huì)進(jìn)行排隊(duì)處理,其命令會(huì)一條一條依次執(zhí)行.但是,利用Redis客戶端對Redis進(jìn)行并發(fā)訪問時(shí)可能會(huì)出現(xiàn)連接超時(shí)、數(shù)據(jù)轉(zhuǎn)換錯(cuò)誤、阻塞、客戶端意外關(guān)閉連接等問題,這些問題的出現(xiàn)都可能會(huì)影響Redis的性能.
本文通過分析OCC-DA并發(fā)控制算法,以及結(jié)合Redis內(nèi)存數(shù)據(jù)庫的特點(diǎn),提出了基于OCC-DA的改良算法,在Redis的高并發(fā)實(shí)際應(yīng)用中有很重要的實(shí)用意義.
并發(fā)控制是指在多個(gè)用戶同時(shí)對服務(wù)器執(zhí)行數(shù)據(jù)操作時(shí),能夠確保并糾正由并發(fā)操作導(dǎo)致的錯(cuò)誤,用于保護(hù)數(shù)據(jù)庫完整性的各種技術(shù),其基本單位是事務(wù).并發(fā)機(jī)制的不正確可能會(huì)導(dǎo)致服務(wù)器數(shù)據(jù)的丟失、不可重復(fù)讀取等問題.
內(nèi)存數(shù)據(jù)庫作為一個(gè)共享資源,不同的客戶端可以隨時(shí)的對其進(jìn)行數(shù)據(jù)訪問,為了最大限度的利用數(shù)據(jù)庫里的資源,就應(yīng)該允許多個(gè)客戶端并行的對數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行訪問.對于實(shí)際的系統(tǒng),可能會(huì)出現(xiàn)多個(gè)客戶端并發(fā)操作同一個(gè)數(shù)據(jù)的情況,如果沒有相應(yīng)的機(jī)制來控制并發(fā)操作,很可能會(huì)對數(shù)據(jù)造成誤操作,破壞數(shù)據(jù)庫的一致性,因此,并發(fā)控制效果是衡量內(nèi)存數(shù)據(jù)庫性能的重要指標(biāo)之一.
并發(fā)控制主要有悲觀控制和樂觀控制[3],其技術(shù)手段有時(shí)間戳、封鎖、多版本和快照隔離等.基于鎖的并發(fā)控制屬于悲觀并發(fā)控制算法,使用該類算法時(shí),事務(wù)沒有獲取鎖之前無法訪問數(shù)據(jù)對象,悲觀并發(fā)控制算法較為常見的有2PL-HP、2PL-PI、2PL-CPI等;樂觀并發(fā)控制算法的事務(wù)執(zhí)行分為三個(gè)階段:讀階段、驗(yàn)證階段和寫階段,該類算法主要有OCC-BC、OCC-Sacrifice、OCC-Wait、OOC-TI、OCC-DA等.本文針對OCC-DA算法進(jìn)行研究.
在對實(shí)時(shí)事務(wù)進(jìn)行并發(fā)控制時(shí),會(huì)考慮到事務(wù)的優(yōu)先級和截止期兩個(gè)主要因素,根據(jù)在這兩個(gè)因素上的不同側(cè)重點(diǎn),兩類算法分別存在不同的影響算法性能的問題.
1) 悲觀控制算法的主要問題有:浪費(fèi)的等待和浪費(fèi)的重啟.
浪費(fèi)的重啟:考慮到事務(wù)的優(yōu)先級,悲觀控制算法會(huì)在低優(yōu)先級的事務(wù)與高優(yōu)先級的事務(wù)發(fā)生沖突時(shí)重啟低優(yōu)先級的事務(wù),如果在重啟低優(yōu)先級的事務(wù)后,高優(yōu)先級的事務(wù)因?yàn)殄e(cuò)過截止期而導(dǎo)致事務(wù)中止,那么低優(yōu)先級事務(wù)的重啟就是浪費(fèi)的重啟.
浪費(fèi)的等待:如果低優(yōu)先級的事務(wù)與高優(yōu)先級的事務(wù)發(fā)生沖突時(shí)進(jìn)入等待狀態(tài),而在等待期間高優(yōu)先級的事務(wù)因?yàn)殄e(cuò)過截止期而導(dǎo)致事務(wù)中止,那么低優(yōu)先級的事務(wù)的等待就是浪費(fèi)的等待.
2) 樂觀控制算法的主要問題有:浪費(fèi)的執(zhí)行和不必要的重啟.
浪費(fèi)的執(zhí)行:主要有兩種可能導(dǎo)致該問題的原因.一個(gè)是如果事務(wù)因?yàn)殄e(cuò)過時(shí)間截止期而中止了,那么該事務(wù)的所有執(zhí)行時(shí)間都是浪費(fèi)的;另一個(gè)是如果事務(wù)因?yàn)閿?shù)據(jù)訪問沖突而重啟了,那么事務(wù)之前的執(zhí)行都是浪費(fèi)的.
不必要的重啟:如果一個(gè)事務(wù)在驗(yàn)證階段被重啟了,且該事務(wù)如果不重啟的話仍然能保證事務(wù)調(diào)度的可串行性,那么這種重啟就是不必要的.
Redis對于并發(fā)控制的處理,主要是基于其相應(yīng)的事務(wù)操作[4].內(nèi)部原理是通過命令將一組數(shù)據(jù)庫操作命令集合起來,一次全部執(zhí)行.使用的命令有:MULTI(開啟事務(wù));EXEC(執(zhí)行事務(wù))、DISCARD(取消事務(wù))、WATCH(監(jiān)視數(shù)據(jù)).Redis事務(wù)中所有的操作都會(huì)被序列化,并且有序的執(zhí)行.
Redis使用的是檢查設(shè)置算法(check-and-set,OCC-CS)處理并發(fā)的問題,這是一種樂觀并發(fā)控制算法.當(dāng)一個(gè)請求開啟事務(wù)對某個(gè)數(shù)據(jù)進(jìn)行操作時(shí),會(huì)首先使用WATCH命令來監(jiān)視這個(gè)數(shù)據(jù),如果事務(wù)執(zhí)行前數(shù)據(jù)值被修改了,那么事務(wù)就會(huì)被取消.假設(shè)事務(wù)T1使用WATCH命令監(jiān)控了數(shù)據(jù)D的值,OCC-CS算法的具體描述如下:
if(D.oldvalue!=D.newvalue)
DISCARD T1;
else
EXEC T1;
其中,D.oldvalue是開啟事務(wù)時(shí)D的值,D.newvalue是執(zhí)行事務(wù)前D的值.在該算法中,優(yōu)先對數(shù)據(jù)進(jìn)行操作的事務(wù)會(huì)成功提交,并未考慮事務(wù)真正的優(yōu)先級,且在實(shí)際的使用中會(huì)出現(xiàn)大量的事務(wù)重啟,因此并不適用于實(shí)際的實(shí)時(shí)數(shù)據(jù)庫.
樂觀動(dòng)態(tài)調(diào)整串行化(Dynamic Adjustment of Serialization Order,OCC-DA)算法[5],使用動(dòng)態(tài)的時(shí)間戳(SOT)來標(biāo)識事務(wù),每個(gè)數(shù)據(jù)對象有讀和寫兩個(gè)時(shí)間戳.對于事務(wù)來說,只有在其動(dòng)態(tài)時(shí)間戳的值比數(shù)據(jù)對象的時(shí)間戳大時(shí),才能對數(shù)據(jù)對象進(jìn)行操作,否則事務(wù)必須重啟.假定事務(wù)T1和T2,沖突事務(wù)集合T_set,數(shù)據(jù)對象D,大致的驗(yàn)證階段算法描述如下:
Validate(T1){
if(T1.TS RESTART T1; if(T1.Priority RESTART T1; else RESTART T2; UPDATE D.WTS; UPDATE D.RTS; EXEC T1; } 其中,RESTART表示重啟事務(wù),UPDATE表示更新時(shí)間戳.OCC-DA算法會(huì)根據(jù)優(yōu)先級來決定沖突事務(wù)的重啟,同時(shí)可以動(dòng)態(tài)調(diào)整串行化的順序,降低事務(wù)重啟的概率. 傳統(tǒng)的OCC-DA算法在進(jìn)行并行控制時(shí),由于沒有對事務(wù)時(shí)間截止期的驗(yàn)證,在事務(wù)發(fā)生沖突導(dǎo)致重啟后可能會(huì)造成事務(wù)浪費(fèi)的執(zhí)行.而且在OCC-DA算法中,雖然有對于實(shí)時(shí)事務(wù)的優(yōu)先級的描述,但是對于事務(wù)的重要度(即事務(wù)對實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)的價(jià)值)和實(shí)時(shí)數(shù)據(jù)的一致性這兩點(diǎn)是沒有考慮到的.針對OCC-DA算法的缺點(diǎn),本文通過加入事務(wù)重要度、時(shí)間截止期和數(shù)據(jù)一致性的描述,提出了樂觀多條件優(yōu)先級動(dòng)態(tài)調(diào)整串行化(OCC-Dynamic Adjustment of Serialization Multi Condition Pririoty,OCC-DA-MCP)并發(fā)控制算法. OCC-DA-MCP算法中有3個(gè)事務(wù)集合:重要事務(wù)(Critic_Set)、活動(dòng)事務(wù)(Active_Set)和擱置事務(wù)(Idle_Set).重要事務(wù)是執(zhí)行等級最高的事務(wù),算法總是會(huì)優(yōu)先執(zhí)行該集合中的事務(wù),該事務(wù)的判定方法有兩種,一個(gè)是硬實(shí)時(shí)事務(wù),另一個(gè)是優(yōu)先級達(dá)到重要事務(wù)判定閾值(PThreshold)的軟實(shí)時(shí)事務(wù)和固實(shí)時(shí)事務(wù),這類事務(wù)可以看作是優(yōu)先級處于頂端的活動(dòng)事務(wù);活動(dòng)事務(wù)會(huì)與驗(yàn)證事務(wù)進(jìn)行沖突檢測,算法在產(chǎn)生沖突時(shí)會(huì)依據(jù)優(yōu)先級和時(shí)間截止期等條件對集合中事務(wù)的動(dòng)態(tài)時(shí)間戳進(jìn)行調(diào)整;擱置事務(wù)是截止期比較長,可以暫時(shí)等待的事務(wù).設(shè)置活動(dòng)事務(wù)和擱置事務(wù)兩個(gè)集合,可以減少算法進(jìn)行沖突檢測時(shí)事務(wù)的數(shù)量,從而減少系統(tǒng)資源上的開銷. OCC-DA-MCP算法在OCC-DA算法的基礎(chǔ)上加入了對事務(wù)重要度的描述,這樣可以更大程度的保證重要事務(wù)的執(zhí)行.同時(shí)在樂觀控制的事務(wù)三階段處理思想上,加入了事務(wù)分類階段,這樣做可以提高并發(fā)控制算法處理重要事務(wù)的能力.各階段的描述如下: 1) 分類階段 該階段首先檢測事務(wù)是否合法,通過合法性檢測的事務(wù)會(huì)根據(jù)實(shí)時(shí)事務(wù)的類型來進(jìn)行分類,如果事務(wù)不是重要事務(wù),那么會(huì)根據(jù)事務(wù)的時(shí)間截止期將事務(wù)放入不同的集合中.假定實(shí)時(shí)事務(wù)T1,該階段的具體算法描述如下: if(Check(T1)){ if(T1.T==“硬實(shí)時(shí)事務(wù)” OR T1.P>PT) Critic_Set.Add(T1); else{ if(T1.Deadline > PThreshold) Active_Set.Add(T1); else Idle_Set.Add(T1); } } else DISCARD T1; 其中,Check表示檢測事務(wù)是否合法,Add表示在相應(yīng)的事務(wù)集合中加入該事務(wù). 2) 讀階段 事務(wù)在進(jìn)入重要事務(wù)集合或者活動(dòng)事務(wù)集合時(shí)會(huì)開始該階段.在該階段,事務(wù)會(huì)將需要操作的各數(shù)據(jù)的值讀入局部變量區(qū)中,并將所有寫操作的結(jié)果都保存在局部變量區(qū)中,同時(shí)驗(yàn)證事務(wù)操作數(shù)據(jù)的內(nèi)部一致性.算法描述如下: ReadPhase(T); foreach(D∈T.DATA) if(!CheckInConsistency(D)) DISCARD T; 其中,ReadPhase表示事務(wù)進(jìn)入讀階段后,將需要操作的數(shù)據(jù)讀到局部變量區(qū)并進(jìn)行相關(guān)的操作,CheckInConsistency的作用是驗(yàn)證數(shù)據(jù)的內(nèi)部一致性,如果不滿足內(nèi)部一致性,會(huì)返回假,此時(shí)事務(wù)會(huì)直接中止. 3) 驗(yàn)證階段 驗(yàn)證階段會(huì)對事務(wù)進(jìn)行有效性的檢測,同時(shí)會(huì)進(jìn)行數(shù)據(jù)的外部一致性檢測,判定是否可以將局部變量區(qū)中的數(shù)據(jù)復(fù)制到實(shí)時(shí)數(shù)據(jù)庫中,如果判定通過,事務(wù)會(huì)進(jìn)入寫階段. 假定事務(wù)T1處于驗(yàn)證階段,事務(wù)T2是活動(dòng)事務(wù)集合中的任意事務(wù),以及數(shù)據(jù)對象D.將所有滿足SOT(T2) 第1步:檢測數(shù)據(jù)的外部一致性.如果D.ST+D.TI>TC,TC表示系統(tǒng)當(dāng)前的時(shí)間,數(shù)據(jù)D滿足外部一致性,否則不滿足,當(dāng)數(shù)據(jù)的外部一致性失效時(shí),事務(wù)會(huì)中止. 第2步:檢測驗(yàn)證事務(wù)是否和已提交的事務(wù)發(fā)生了沖突.如果SOT(T1) 第3步:檢測驗(yàn)證事務(wù)的寫操作是否都有效.如果SOT(T1) 第4步:檢測驗(yàn)證事務(wù)與活動(dòng)事務(wù)的數(shù)據(jù)訪問沖突.比較驗(yàn)證事務(wù)T1的寫數(shù)據(jù)集合與ATS(T1)集合中的活動(dòng)事務(wù)T2的讀數(shù)據(jù)集合,如果發(fā)生了沖突,則將沖突事務(wù)T2添加到?jīng)_突集合CT(T1)中. 第5步:檢測活動(dòng)事務(wù)與驗(yàn)證事務(wù)的數(shù)據(jù)訪問沖突.比較BST(T1)或者CT(T1)中的活動(dòng)事務(wù)T2的寫數(shù)據(jù)集合與驗(yàn)證事務(wù)T1的讀寫集合,如果存在交集,則說明T2與T1發(fā)生了沖突.此時(shí)必須進(jìn)行沖突解決,根據(jù)優(yōu)先級和時(shí)間截止期選擇被重啟的事務(wù). 根據(jù)事務(wù)驗(yàn)證階段的執(zhí)行內(nèi)容,用WS(T)表示事務(wù)的寫集合,RS(T)表示事務(wù)的讀集合,事務(wù)驗(yàn)證階段的算法描述如下: Validate(T1){ if(D.ST+D.TI>TC) DISCARD T1; else{ if(T2∈Active_Set) foreach(D∈RS(T1)) if(SOT(T1) RESTART T1; foreach(D∈WS(T1)) if(SOT(T1) RESTART T1; CT(T1).Clear; if(T2∈ATS(T1)) foreach(D∈WS(T1)) if(D∈RS(T2)) CT(T1).Add(T2); if(T2∈BTS(T1) || T2∈CT(T1)){ foreach(D∈RS(T1)) if(D∈WS(T2)) Conflict_Solve(T1,T2); foreach(D∈WS(T1)) if(D∈WS(T2)) Conflict_Solve(T1,T2); } } } 其中,Clear表示清空事務(wù)集合,Conflict_Solve表示事務(wù)沖突的解決.OCC-DA算法采用的是優(yōu)先級的方式來解決沖突,低優(yōu)先級的事務(wù)總是會(huì)首先重啟,這樣可以簡化算法的執(zhí)行,但是可能會(huì)出現(xiàn)浪費(fèi)的執(zhí)行的情況.例如,驗(yàn)證事務(wù)T1的優(yōu)先級比活動(dòng)事務(wù)T2的優(yōu)先級低,且T1和T2出現(xiàn)了讀寫沖突,此時(shí)OCC-DA算法會(huì)直接重啟T1,但是T2后來執(zhí)行時(shí)超過了時(shí)間截止期,這樣就導(dǎo)致了浪費(fèi)的執(zhí)行,同時(shí),如果T2的時(shí)間截止期還比較充裕,而T1重啟后離時(shí)間截止期也比較近,這樣就導(dǎo)致了T1的執(zhí)行是浪費(fèi)的.因此在設(shè)計(jì)沖突解決策略時(shí),OCC-DA-MCP算法引入了執(zhí)行時(shí)間和時(shí)間截止期兩個(gè)參數(shù)來避免浪費(fèi)的執(zhí)行.該階段算法描述如下: Conflict_Solve(T1,T2){ if(T1.P>T2.P) ASS(T1).Add(T2); else{ if(T2.AST-TC>Factor×T2.ET) ASS(T1).Add(T2); else if(T2.AST-TC DISCARD T2 else RESTART T1; } } 其中,ASS表示需要調(diào)整動(dòng)態(tài)時(shí)間戳的事務(wù),在寫階段會(huì)對該集合中的事務(wù)進(jìn)行時(shí)間戳調(diào)整.Factor是T2剩余時(shí)間截止期的比例系數(shù),實(shí)驗(yàn)表明取1.3~1.5時(shí)策略的效果比較好. 4) 寫階段 事務(wù)通過驗(yàn)證階段后會(huì)進(jìn)入寫階段,到達(dá)寫階段的事務(wù)總是會(huì)被提交.事務(wù)在該階段會(huì)首先更新數(shù)據(jù)的讀寫時(shí)間戳和ASS集合中事務(wù)的時(shí)間戳,然后將局部變量區(qū)中的數(shù)據(jù)復(fù)制到實(shí)時(shí)數(shù)據(jù)庫中,即完成提交.該階段的算法描述如下: foreach(T∈ASS(T1)) T.SOT=TC; foreach(D∈RS(T1)) D.RTS=TC; foreach(T∈WS(T1)) D.WTS=TC; EXEC WS(T1); 通過搭建的測試環(huán)境對相應(yīng)的并發(fā)控制算法進(jìn)行性能測試,取相同參數(shù)下的仿真實(shí)驗(yàn)10次結(jié)果的平均值作為一次實(shí)驗(yàn)的真正結(jié)果.測試中使用的參數(shù),主要參考了以前的文獻(xiàn)[6],事務(wù)生成時(shí)優(yōu)先級是根據(jù)最早截止期優(yōu)先的策略分配的[7].表1中反映了系統(tǒng)的負(fù)載狀態(tài)和事務(wù)的部分特性設(shè)置. 表1 實(shí)驗(yàn)參數(shù)及對應(yīng)值 1) 截止期計(jì)算公式 DeadLine=AT+uniform(MinSlack, MaxSlack) × ET, (1) 式中,AT表示的是事務(wù)到達(dá)的時(shí)間,ET表示的是事務(wù)執(zhí)行的時(shí)間,uniform是均勻分布函數(shù). 2) 事務(wù)錯(cuò)失率計(jì)算公式 M_Ratio=Num_Miss ÷ Num_Total, (2) 式中,M_Ratio是事務(wù)的截止期錯(cuò)失率,Num_Miss表示錯(cuò)失截止期的事務(wù)個(gè)數(shù),Num_Total表示總的事務(wù)個(gè)數(shù). 圖1 WP為0.2時(shí)事務(wù)錯(cuò)失率Fig.1 Transaction miss rate when WP=0.2 圖2 WP為0.3時(shí)事務(wù)錯(cuò)失率Fig.2 Transaction miss rate when WP=0.3 將WP值分別設(shè)置為0.2和0.3,并將事務(wù)到達(dá)率設(shè)置為變化量.如圖1所示,此時(shí)WP為0.2,當(dāng)系統(tǒng)事務(wù)到達(dá)率小于300,即負(fù)載較低時(shí),OCC-DA算法和OCC-DA-MCP算法都能表現(xiàn)出比較好的性能,事務(wù)錯(cuò)失率幾乎為零.隨著事務(wù)到達(dá)率的 增加,OCC-CS算法性能降低的比較快,而OCC-DA算法和OCC-DA-MCP算法的錯(cuò)失率比OCC-CS算法要低很多,即性能要好很多. 如圖2所示,此時(shí)WP為0.3,同一種算法的事務(wù)錯(cuò)失率總體趨勢和WP為0.2時(shí)是一致的,即隨著事務(wù)到達(dá)率的增加,事務(wù)錯(cuò)失率也增加.但是相較于WP為0.2時(shí),OCC-DA-MCP算法能夠比OCC-DA算法表現(xiàn)出更好的性能.由此可見,隨著WP值的增加,OCC-DA-MCP算法能夠更好的提高Redis的并發(fā)性能. 針對Redis并發(fā)控制性能低的問題,本文在參考OCC-DA算法的基礎(chǔ)上,結(jié)合事務(wù)優(yōu)先權(quán)和實(shí)時(shí)數(shù)據(jù)一致性,提出了改進(jìn)算法OCC-DA-MCP.試驗(yàn)結(jié)果表明,OCC-DA-MCP算法能夠提高Redis的并發(fā)性能. [1] 黃健宏. Redis 設(shè)計(jì)與實(shí)現(xiàn)[M].北京:機(jī)械工業(yè)出版社, 2014. [2] 曾超宇, 李金香. Redis在高速緩存系統(tǒng)中的應(yīng)用[J].微型機(jī)與應(yīng)用, 2013,32(12):11-13. [3] 祁 鑫, 王文海. 實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)并發(fā)控制機(jī)制綜述[J].化工自動(dòng)化及儀表, 2006,33(1):47-50. [4] 賴 歆. 基于Redis的分布式鎖的實(shí)現(xiàn)方案[J].信息通信, 2016,166(10):83-84. [5] 邊 遠(yuǎn), 楊 靜, 盧大勇. 一種改進(jìn)的動(dòng)態(tài)調(diào)整串行化順序算法[J].計(jì)算機(jī)工程, 2008,34(3):108-110. [6] 劉云生, 夏家莉, 許貴平. 嵌入式數(shù)據(jù)庫系統(tǒng)的事務(wù)調(diào)度[J].軟件學(xué)報(bào), 2002,13(8):1692-1697. [7] INDRAKSHI R.Real-time update of access control policies[J].Data and Knowledge Engineering, 2004,49(3):287-309. OCC-DA-MCPalgorithmbasedconcurrencycontrolofRedis GUO Xuan, ZHOU Hao, LUO Wenhui (School of Automation, Wuhan University of Technology, Wuhan 430070, China) In order to improve the concurrency performance of Redis memory database, the existing memory database concurrency control (OCC-DA-MCP) algorithm is studied in the present work. And then Redis concurrency control is desighend and realized in combination of Redis architecture with OCC-DA-MCP algorithm. The simulation results show that the algorithm, to a certain extent, improves the problems of existing Redis concurrency control algorithm such as wasteful execution and unnecessary restart. concurrency control; Redis; memory database 2017-05-11. 國家高技術(shù)研究發(fā)展計(jì)劃項(xiàng)目(863計(jì)劃-2015AA015904). *E-mail: 498820227@qq.com. 10.19603/j.cnki.1000-1190.2017.06.006 1000-1190(2017)06-0760-05 TP311.133.1 A2.3 OCC-DA-MCP并發(fā)控制
3 并發(fā)控制性能分析
4 結(jié)束語