本發(fā)明涉及信息存儲(chǔ)技術(shù),具體涉及一種基于遠(yuǎn)程字典服務(wù)器的數(shù)據(jù)存儲(chǔ)方法及系統(tǒng)。
背景技術(shù):
隨著社會(huì)進(jìn)步及科技的發(fā)展,互聯(lián)網(wǎng)技術(shù)也得到飛速的發(fā)展,尤其是進(jìn)入互聯(lián)網(wǎng)+時(shí)代后,互聯(lián)網(wǎng)企業(yè)在伴隨其業(yè)務(wù)飛速發(fā)展的同時(shí),用戶需求也越來越復(fù)雜且多變,進(jìn)而會(huì)產(chǎn)生巨量的數(shù)據(jù)信息,而采用傳統(tǒng)的存儲(chǔ)方案對(duì)巨量數(shù)據(jù)信息的存儲(chǔ)又無法滿足網(wǎng)絡(luò)應(yīng)用平臺(tái)及用戶體驗(yàn)。
遠(yuǎn)程字典服務(wù)器(REDIS,Remote DIctionary Server)是一個(gè)鍵值(key-value)存儲(chǔ)系統(tǒng),支持存儲(chǔ)字符串(string)、鏈表(list)、集合(set)、有序集合(zset-sortedset)和哈希(hash)等value類型。同時(shí)這些數(shù)據(jù)類型都支持推進(jìn)/彈出(push/pop)、添加/移除(add/remove)及取交集并集和差集等更豐富的原子性操作指令。為了保證效率,REDIS數(shù)據(jù)都是緩存在內(nèi)存中,并且REDIS會(huì)周期性的把更新的數(shù)據(jù)寫入磁盤、或者把修改操作指令寫入追加的記錄文件,從而能夠?qū)崿F(xiàn)主盤和從盤(master-slave)同步。
由于現(xiàn)有的REDIS緩存技術(shù)對(duì)鍵值采用一致性哈希算法,將數(shù)據(jù)平均存儲(chǔ)到各個(gè)緩存服務(wù)器中,然后在鍵值所在的緩存服務(wù)器進(jìn)行數(shù)據(jù)訪問。而采用這樣的數(shù)據(jù)存儲(chǔ)方法,會(huì)存在以下缺點(diǎn):
1、在密集數(shù)據(jù)訪問的應(yīng)用上,REDIS緩存技術(shù)傳輸時(shí)延嚴(yán)重,影響用戶感知。比如:一個(gè)操作接口需要查詢REDIS緩存1000次,且每次傳輸時(shí)延為1毫秒(millisecond),則所述操作接口的操作時(shí)延將增加1秒(second)。
2、在高并發(fā)數(shù)據(jù)訪問的情形下,REDIS緩存技術(shù)的丟包概率較大。
技術(shù)實(shí)現(xiàn)要素:
為解決現(xiàn)有存在的技術(shù)問題,本發(fā)明實(shí)施例期望提供一種基于遠(yuǎn)程字典服務(wù)器的數(shù)據(jù)存儲(chǔ)方法及系統(tǒng),能夠提高數(shù)據(jù)傳輸速度,同時(shí)能夠避免數(shù)據(jù)包丟失。
本發(fā)明實(shí)施例的技術(shù)方案是這樣實(shí)現(xiàn)的:
根據(jù)本發(fā)明實(shí)施例的一方面,提供一種基于遠(yuǎn)程字典服務(wù)器的數(shù)據(jù)存儲(chǔ)方法,所述方法包括:
獲取第一對(duì)象REDIS或第二對(duì)象REDIS緩存的實(shí)體對(duì)象和參考對(duì)象,其中,所述第一對(duì)象REDIS位于第一數(shù)據(jù)中心,所述第二對(duì)象REDIS位于第二數(shù)據(jù)中心;
確定所述實(shí)體對(duì)象的版本號(hào)低于所述參考對(duì)象的版本號(hào)時(shí),獲取第一版本號(hào)REDIS分配的新版本號(hào),并根據(jù)所述新版本號(hào)獲取第一數(shù)據(jù)庫重新加載的新實(shí)體對(duì)象,其中,所述第一版本號(hào)REDIS和所述第一數(shù)據(jù)庫位于所述第一數(shù)據(jù)中心;
同步更新所述第一對(duì)象REDIS和所述第二對(duì)象REDIS緩存的實(shí)體對(duì)象為所述新實(shí)體對(duì)象。
上述方案中,所述獲取第一對(duì)象REDIS或第二對(duì)象REDIS緩存的實(shí)體對(duì)象和參考對(duì)象,包括:
通過REDIS的JAVA業(yè)務(wù)模塊內(nèi)容中心的類Jedis Wrapper向本站點(diǎn)內(nèi)第一對(duì)象REDIS或第二對(duì)象REDIS發(fā)送對(duì)象獲取請(qǐng)求;
接收所述第一對(duì)象REDIS或所述第二對(duì)象REDIS根據(jù)所述對(duì)象獲取請(qǐng)求發(fā)送的實(shí)體對(duì)象和參考對(duì)象。
上述方案中,所述獲取第一版本號(hào)REDIS分配的新版本號(hào),包括:
向所述第一版本號(hào)REDIS發(fā)送新版本號(hào)獲取請(qǐng)求;
接收所述第一版本號(hào)REDIS根據(jù)新版本號(hào)獲取請(qǐng)求分配的新版本號(hào),所述新版本號(hào)高于所述參考對(duì)象的版本號(hào)。
上述方案中,所述根據(jù)所述新版本號(hào)獲取第一數(shù)據(jù)庫重新加載的新實(shí)體對(duì)象,包括:
向所述第一數(shù)據(jù)庫發(fā)送對(duì)象加載請(qǐng)求,所述對(duì)象加載請(qǐng)求中攜帶有所述新版本號(hào);
接收所述第一數(shù)據(jù)庫根據(jù)所述對(duì)象加載請(qǐng)求重新加載的新實(shí)體對(duì)象。
上述方案中,所述同步更新所述第一對(duì)象REDIS和所述第二對(duì)象REDIS緩存的實(shí)體對(duì)象為所述新實(shí)體對(duì)象,包括:
通過所述Jedis Wrapper同步更新所述第一對(duì)象REDIS和所述第二對(duì)象REDIS緩存的實(shí)體對(duì)象為所述新實(shí)體對(duì)象。
上述方案中,在所述獲取第一版本號(hào)REDIS分配的新版本號(hào)之后,所述方法還包括:
將所述新版本號(hào)同步更新到第二版本號(hào)REDIS,所述第二版本號(hào)REDIS位于所述第二數(shù)據(jù)中心。
上述方案中,在所述根據(jù)所述新版本號(hào)獲取第一數(shù)據(jù)庫重新加載的新實(shí)體對(duì)象之后,所述方法還包括:
將所述新實(shí)體對(duì)象同步更新到第二數(shù)據(jù)庫,所述第二數(shù)據(jù)庫位于所述第二數(shù)據(jù)中心。
根據(jù)本發(fā)明實(shí)施例的另一方面,提供一種基于遠(yuǎn)程字典服務(wù)器的數(shù)據(jù)存儲(chǔ)系統(tǒng),所述系統(tǒng)包括:位于第一數(shù)據(jù)中心的第一內(nèi)容服務(wù)器、第一對(duì)象REDIS、第一版本號(hào)REDIS、第一數(shù)據(jù)庫,以及位于第二數(shù)據(jù)中心的第二內(nèi)容服務(wù)器和第二對(duì)象REDIS;其中,
所述第一對(duì)象REDIS或所述第二對(duì)象REDIS,用于緩存實(shí)體對(duì)象和參考對(duì)象;
所述第一版本號(hào)REDIS,用于分配新版本號(hào);
所述第一內(nèi)容服務(wù)器或所述第二內(nèi)容服務(wù)器,用于獲取第一對(duì)象REDIS或所述第二對(duì)象REDIS緩存的實(shí)體對(duì)象和參考對(duì)象;確定所述實(shí)體對(duì)象的版本號(hào)低于所述參考對(duì)象的版本號(hào)時(shí),獲取所述第一版本號(hào)REDIS分配的新版本號(hào),并根據(jù)所述新版本號(hào)獲取所述第一數(shù)據(jù)庫重新加載的新實(shí)體對(duì)象;同步更新所述第一對(duì)象REDIS和所述第二對(duì)象REDIS緩存的實(shí)體對(duì)象為所述新實(shí)體對(duì)象。
上述方案中,所述第一內(nèi)容服務(wù)器或所述第二內(nèi)容服務(wù)器,具體用于通過Jedis Wrapper向本站點(diǎn)內(nèi)第一對(duì)象REDIS或第二對(duì)象REDIS發(fā)送對(duì)象獲取請(qǐng)求,接收所述第一對(duì)象REDIS或第二對(duì)象REDIS根據(jù)所述對(duì)象獲取請(qǐng)求發(fā)送的實(shí)體對(duì)象和參考對(duì)象。
上述方案中,所述第一內(nèi)容服務(wù)器或所述第二內(nèi)容服務(wù)器,具體還用于向所述第一版本號(hào)REDIS發(fā)送新版本號(hào)獲取請(qǐng)求,接收所述第一版本號(hào)REDIS根據(jù)所述新版本號(hào)獲取請(qǐng)求分配的新版本號(hào),所述新版本號(hào)高于所述參考對(duì)象的版本號(hào)。
上述方案中,所述第一內(nèi)容服務(wù)器或所述第二內(nèi)容服務(wù)器,具體還用于向所述第一數(shù)據(jù)庫發(fā)送對(duì)象加載請(qǐng)求,所述對(duì)象加載請(qǐng)求中攜帶有所述新版本號(hào);接收所述第一數(shù)據(jù)庫根據(jù)所述對(duì)象加載請(qǐng)求重新加載的新實(shí)體對(duì)象。
上述方案中,所述第一內(nèi)容服務(wù)器或所述第二內(nèi)容服務(wù)器,具體用于通過Jedis Wrapper同步更新所述第一對(duì)象REDIS和所述第二對(duì)象REDIS緩存的實(shí)體對(duì)象為所述新實(shí)體對(duì)象。
上述方案中,所述系統(tǒng)還包括第二版本號(hào)REDIS;
所述第一內(nèi)容服務(wù)器或所述第二內(nèi)容服務(wù)器,具體還用于將所述新版本號(hào)同步更新到第二版本號(hào)REDIS,所述第二版本號(hào)REDIS位于所述第二數(shù)據(jù)中心。
上述方案中,所述系統(tǒng)還包括第二數(shù)據(jù)庫;
所述第一內(nèi)容服務(wù)器或所述第二內(nèi)容服務(wù)器,具體還用于將所述新實(shí)體對(duì)象同步更新到第二數(shù)據(jù)庫,所述第二數(shù)據(jù)庫位于所述第二數(shù)據(jù)中心。
本發(fā)明實(shí)施例提供一種基于遠(yuǎn)程字典服務(wù)器的數(shù)據(jù)存儲(chǔ)方法及系統(tǒng),通過獲取第一對(duì)象REDIS或第二對(duì)象REDIS緩存的實(shí)體對(duì)象和參考對(duì)象,其中,所述第一對(duì)象REDIS位于第一數(shù)據(jù)中心,所述第二對(duì)象REDIS位于第二數(shù)據(jù)中心;確定所述實(shí)體對(duì)象的版本號(hào)低于所述參考對(duì)象的版本號(hào)時(shí),獲取第一版本號(hào)REDIS分配的新版本號(hào),并根據(jù)所述新版本號(hào)獲取第一數(shù)據(jù)庫重新加載的新實(shí)體對(duì)象,其中,所述第一版本號(hào)REDIS和所述第一數(shù)據(jù)庫位于所述第一數(shù)據(jù)中心;同步更新所述第一對(duì)象REDIS和所述第二對(duì)象REDIS緩存的實(shí)體對(duì)象為所述新實(shí)體對(duì)象。如此,在執(zhí)行讀緩存操作時(shí),只讀取本站點(diǎn)內(nèi)的REDIS服務(wù)器,而在執(zhí)行寫緩存操作時(shí),則采用雙寫的方法,同步更新雙數(shù)據(jù)中心的REDIS服務(wù)器,使得雙數(shù)據(jù)中心的REDIS服務(wù)器在相同的鍵值里保持存儲(chǔ)的數(shù)據(jù)相同。這樣,能夠提高數(shù)據(jù)傳輸速度同時(shí)能夠避免數(shù)據(jù)包丟失。
附圖說明
圖1為本發(fā)明實(shí)施例一種基于遠(yuǎn)程字典服務(wù)器的數(shù)據(jù)存儲(chǔ)方法的流程示意圖;
圖2為本發(fā)明實(shí)施例中REDIS執(zhí)行緩存讀取的流程示意圖;
圖3為本發(fā)明實(shí)施例一種基于遠(yuǎn)程字典服務(wù)器的數(shù)據(jù)存儲(chǔ)系統(tǒng)的結(jié)構(gòu)組成示意圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行詳細(xì)說明。應(yīng)當(dāng)理解的是,此處所描述的具體實(shí)施方式僅用于說明和解釋本發(fā)明,并不用于限制本發(fā)明。
圖1為一種基于遠(yuǎn)程字典服務(wù)器的數(shù)據(jù)存儲(chǔ)方法的流程示意圖;如圖1所示,該方法包括:
步驟101,獲取第一對(duì)象REDIS或第二對(duì)象REDIS緩存的實(shí)體對(duì)象和參考對(duì)象,其中,所述第一對(duì)象REDIS位于第一數(shù)據(jù)中心,所述第二對(duì)象REDIS位于第二數(shù)據(jù)中心;
本發(fā)明實(shí)施例的方法主要應(yīng)用在雙數(shù)據(jù)中心,所述雙數(shù)據(jù)中心包括第一數(shù)據(jù)中心和第二數(shù)據(jù)中心,其中,所述第一對(duì)象REDIS位于所述第一數(shù)據(jù)中心,所述第二對(duì)象REDIS位于所述第二數(shù)據(jù)中心。
在本發(fā)明實(shí)施例中,所述第一對(duì)象REDIS和所述第二對(duì)象REDIS可以是單臺(tái)REDIS服務(wù)器,也可以是多臺(tái)REDIS服務(wù)器組成的REDIS服務(wù)器集群。
具體地,所述第一數(shù)據(jù)中心的第一內(nèi)容服務(wù)器通過REDIS的JAVA業(yè)務(wù)模塊內(nèi)容中心的類(Jedis Wrapper)向本站點(diǎn)內(nèi)第一對(duì)象REDIS發(fā)送對(duì)象獲取請(qǐng)求,所述第一對(duì)象REDIS接收到所述對(duì)象獲取請(qǐng)求后,根據(jù)所述對(duì)象獲取請(qǐng)求向所述第一內(nèi)容服務(wù)器發(fā)送實(shí)體對(duì)象和參考對(duì)象?;蛘撸龅诙?shù)據(jù)中心的第二內(nèi)容服務(wù)器通過Jedis Wrapper向本站點(diǎn)內(nèi)第二對(duì)象REDIS發(fā)送對(duì)象獲取請(qǐng)求,所述第二對(duì)象REDIS接收到所述對(duì)象獲取請(qǐng)求后,根據(jù)所述對(duì)象獲取請(qǐng)求向所述第二內(nèi)容服務(wù)器發(fā)送實(shí)體對(duì)象和參考對(duì)象。
這里,所述實(shí)體對(duì)像和參考對(duì)象都是實(shí)體類的一個(gè)實(shí)例。具體地,實(shí)體是用于傳遞數(shù)據(jù)的一種數(shù)據(jù)載體,在三層架構(gòu)(3-tier architecture)中會(huì)分一個(gè)實(shí)體層,而數(shù)據(jù)庫中的每一張表叫做實(shí)體集,在程序中為了消除數(shù)據(jù)庫的關(guān)系模型,使之面向?qū)ο?,?huì)對(duì)數(shù)據(jù)庫中的表各寫一個(gè)實(shí)體,而實(shí)體對(duì)像和參考對(duì)象就是實(shí)體類的一個(gè)實(shí)例。
步驟102,確定所述實(shí)體對(duì)象的版本號(hào)低于所述參考對(duì)象的版本號(hào)時(shí),獲取第一版本號(hào)REDIS分配的新版本號(hào),并根據(jù)所述新版本號(hào)獲取第一數(shù)據(jù)庫重新加載的新實(shí)體對(duì)象,其中,所述第一版本號(hào)REDIS和所述第一數(shù)據(jù)庫位于所述第一數(shù)據(jù)中心;
這里,所述第一數(shù)據(jù)中心或所述第二數(shù)據(jù)中心獲取到本站點(diǎn)內(nèi)第一對(duì)象REDIS或第二對(duì)象REDIS緩存的實(shí)體對(duì)象和參考對(duì)象后,確定所述實(shí)體對(duì)象和所述參考對(duì)象的版本號(hào),并將所述實(shí)體對(duì)象的版本號(hào)與所述參考對(duì)象的版本號(hào)進(jìn)行比對(duì),得到比對(duì)結(jié)果,根據(jù)所述比對(duì)結(jié)果確定所述實(shí)體對(duì)象是否處于有效的緩存狀態(tài)。
具體地,當(dāng)根據(jù)所述比對(duì)結(jié)果確定所述實(shí)體對(duì)象的版本號(hào)低于所述參考對(duì)象的版本號(hào)時(shí),確定所述實(shí)體對(duì)象的緩存狀態(tài)為失效狀態(tài),則向所述第一數(shù)據(jù)中心的第一版本號(hào)REDIS發(fā)送新版本號(hào)獲取請(qǐng)求,所述第一版本號(hào)REDIS根據(jù)所述新版本號(hào)獲取請(qǐng)求,向所述第一數(shù)據(jù)中心或所述第二數(shù)據(jù)中心發(fā)送新版本號(hào)。
這里,所述新版本號(hào)高于所述參考對(duì)象的版本號(hào);所述第一數(shù)據(jù)中心或所述第二數(shù)據(jù)中心獲取到所述新版本號(hào)后,將所述新版本號(hào)同步更新到第二數(shù)據(jù)中心的第二版本號(hào)REDIS,并向第一數(shù)據(jù)中心的第一數(shù)據(jù)庫發(fā)送對(duì)象加載請(qǐng)求,其中,所述對(duì)象加載請(qǐng)求中攜帶有所述新版本號(hào)。所述第一數(shù)據(jù)庫接收到所述對(duì)象加載請(qǐng)求后,根據(jù)所述對(duì)象加載請(qǐng)求重新加載實(shí)體對(duì)象,并將重新加載的新實(shí)體對(duì)象發(fā)送給所述第一數(shù)據(jù)中心或所述第二數(shù)據(jù)中心,所述第一數(shù)據(jù)中心或所述第二數(shù)據(jù)中心接收到所述新實(shí)體對(duì)象后,將所述新實(shí)體對(duì)象同步更新到所述第二數(shù)據(jù)中心的第二數(shù)據(jù)庫。這里,采用在異地部署一個(gè)一模一樣的第二版本號(hào)REDIS和第二數(shù)據(jù)庫實(shí)現(xiàn)冷備容災(zāi)方案,可以在所述第一版本號(hào)REDIS和第一數(shù)據(jù)庫所處的地理位置發(fā)生自然災(zāi)害,導(dǎo)致當(dāng)前數(shù)據(jù)庫發(fā)生災(zāi)難時(shí),所述第二版本號(hào)REDIS和所述第二數(shù)據(jù)庫可以立馬頂替工作,保證業(yè)務(wù)不間斷運(yùn)行。
在本發(fā)明實(shí)施例中,所述第一對(duì)象REDIS、所述第二對(duì)象REDIS、所述第一版本號(hào)REDIS和所述第二版本號(hào)REDIS可以分別是由一臺(tái)REDIS服務(wù)器組成,也可以分別是由多臺(tái)REDIS服務(wù)器組成的版本號(hào)REDIS服務(wù)器集群。
步驟103,同步更新所述第一對(duì)象REDIS和所述第二對(duì)象REDIS緩存的實(shí)體對(duì)象為所述新實(shí)體對(duì)象。
這里,為了保證第一對(duì)象REDIS和所述第二對(duì)象REDIS在相同的key里存入的內(nèi)容相同,所述第一數(shù)據(jù)中心或所述第二數(shù)據(jù)中心接收到所述第一數(shù)據(jù)庫重新加載的新實(shí)體對(duì)象后,通過所述Jedis Wrapper同步更新所述第一對(duì)象REDIS和所述第二對(duì)象REDIS緩存的實(shí)體對(duì)象為所述新實(shí)體對(duì)象。
圖2為本發(fā)明實(shí)施例中REDIS執(zhí)行緩存讀取的流程示意圖;如圖2所示,以第二數(shù)據(jù)中心為例進(jìn)行詳細(xì)說明,具體流程包括:
步驟201,第二數(shù)據(jù)中心的第二內(nèi)容服務(wù)器向本站點(diǎn)內(nèi)的緩存中心發(fā)送讀取緩存實(shí)體對(duì)象的請(qǐng)求;
步驟202,所述緩存中心接收所述讀取緩存實(shí)體對(duì)象的請(qǐng)求,并向本站點(diǎn)內(nèi)的Jedis Wrapper發(fā)送所述讀取緩存實(shí)體對(duì)象的請(qǐng)求;
步驟203,所述Jedis Wrapper接收所述讀取緩存實(shí)體對(duì)象的請(qǐng)求,并將所述讀取緩存實(shí)體對(duì)象的請(qǐng)求路由至本站點(diǎn)的第二對(duì)象REDIS;
步驟204,所述第二對(duì)象REDIS接收所述讀取緩存實(shí)體對(duì)象的請(qǐng)求,并根據(jù)所述讀取緩存實(shí)體對(duì)象的請(qǐng)求,向所述Jedis Wrapper發(fā)送所述讀取緩存實(shí)體對(duì)象的請(qǐng)求所針對(duì)的實(shí)體對(duì)象和參考對(duì)象;
步驟205,所述Jedis Wrapper接收所述實(shí)體對(duì)象和參考對(duì)象,并將所述實(shí)體對(duì)象和參考對(duì)象發(fā)送給所述緩存中心;
步驟206,所述緩存中心接收所述實(shí)體對(duì)象和參考對(duì)象,并比較所述實(shí)體對(duì)象和參考對(duì)象的版本號(hào);
這里,緩存中心每請(qǐng)求讀取一個(gè)緩存的實(shí)體對(duì)象,都會(huì)將調(diào)取出的所述實(shí)體對(duì)象與參考對(duì)象的版本號(hào)進(jìn)行比較,根據(jù)比較結(jié)果確定所述實(shí)體對(duì)象的緩存狀態(tài)是否處于有效狀態(tài)。具體地,當(dāng)所述實(shí)體對(duì)象的版本號(hào)高于所述參考對(duì)象的版本號(hào)時(shí),表示所述實(shí)體對(duì)象的緩存狀態(tài)為有效狀態(tài);當(dāng)所述實(shí)體對(duì)象的版本號(hào)低于所述參考對(duì)象的版本號(hào)時(shí),表示所述實(shí)體對(duì)象的緩存狀態(tài)為失效狀態(tài)。
步驟207,緩存中心確定所述實(shí)體對(duì)象的版本號(hào)低于所述參考對(duì)象的版本號(hào)時(shí),向第一數(shù)據(jù)中心的第一版本號(hào)REDIS發(fā)送新版本號(hào)獲取請(qǐng)求;
步驟208,第一版本號(hào)REDIS接收所述新版本號(hào)獲取請(qǐng)求,并根據(jù)所述新版本號(hào)獲取請(qǐng)求向所述緩存中心分配新版本號(hào);
這里,所述新版本號(hào)高于所述參考對(duì)象的版本號(hào)。
步驟209,緩存中心向本站點(diǎn)內(nèi)的第二數(shù)據(jù)庫發(fā)送對(duì)象加載請(qǐng)求,并將新版本號(hào)向第一數(shù)據(jù)中心的第一數(shù)據(jù)庫發(fā)送;
這里,所述對(duì)象加載請(qǐng)求中攜帶所述新版本號(hào)。
步驟210,第一數(shù)據(jù)庫向緩存中心發(fā)送重新加載的新實(shí)體對(duì)象;
步驟211,緩存中心根據(jù)所述新實(shí)體對(duì)象更新緩存,并觸發(fā)所述JedisWrapper進(jìn)行雙寫數(shù)據(jù)的操作;
這里,所述雙寫數(shù)據(jù)的操作是指,將所述新實(shí)體對(duì)象同步更新到所述第一數(shù)據(jù)中心的第一對(duì)象REDIS和第二數(shù)據(jù)中心的第二對(duì)象REDIS。
步驟212,Jedis Wrapper根據(jù)緩存中心的觸發(fā)操作,將第二對(duì)象REDIS緩存的實(shí)體對(duì)象更新為所述新實(shí)體對(duì)象;
步驟213,第二對(duì)象REDIS向所述Jedis Wrapper發(fā)送更新結(jié)果;
步驟214,Jedis Wrapper接收第二對(duì)象REDIS發(fā)送的所述更新結(jié)果;
步驟215,Jedis Wrapper根據(jù)所述更新結(jié)果,向所述緩存中心發(fā)送新加載的實(shí)體對(duì)象;
步驟216,緩存中心接收所述新加載的實(shí)體對(duì)象,并向所述內(nèi)容服務(wù)器發(fā)送新實(shí)體對(duì)象;
步驟217,Jedis Wrapper根據(jù)緩存中心的觸發(fā)操作,將第一數(shù)據(jù)中心中的第一對(duì)象REDIS緩存的實(shí)體對(duì)象更新為所述新實(shí)體對(duì)象;
步驟218,第一對(duì)象REDIS向Jedis Wrapper發(fā)送更新結(jié)果。
在本發(fā)明實(shí)施例中,第一數(shù)據(jù)中心執(zhí)行緩存讀取的方法與第二數(shù)據(jù)中心執(zhí)行緩存讀取的方法大致相同,其不同之處在于,所述第一數(shù)據(jù)中心對(duì)獲取到的實(shí)體對(duì)象和參考對(duì)象進(jìn)行比較之后,確定實(shí)體對(duì)象的版本號(hào)低于參考對(duì)象的版本號(hào)時(shí),也是向第一數(shù)據(jù)中心的第一版本號(hào)REDIS發(fā)送新版本號(hào)獲取請(qǐng)求,并接收所述第一版本號(hào)REDIS根據(jù)所述新版本號(hào)獲取請(qǐng)求發(fā)送的新版本號(hào),所述新版本號(hào)高于參考對(duì)象的版本號(hào)。
本發(fā)明實(shí)施例與現(xiàn)有技術(shù)相比,通過在執(zhí)行讀緩存操作時(shí),只讀取本站點(diǎn)內(nèi)的REDIS服務(wù)器,而在執(zhí)行寫緩存操作時(shí),則采用雙寫的方法,同步寫入雙數(shù)據(jù)中心的REDIS服務(wù)器,使得雙數(shù)據(jù)中心的REDIS服務(wù)器在相同的key里保持存儲(chǔ)的數(shù)據(jù)相同。如此,能夠提高數(shù)據(jù)傳輸速度同時(shí)能夠避免數(shù)據(jù)包丟失。
圖3為本發(fā)明實(shí)施例基于遠(yuǎn)程字典服務(wù)器的數(shù)據(jù)存儲(chǔ)系統(tǒng)的結(jié)構(gòu)示意圖,如圖3所示,所述系統(tǒng)包括:位于第一數(shù)據(jù)中心300的第一內(nèi)容服務(wù)器301、第一對(duì)象REDIS 302、第一版本號(hào)REDIS 303、第一數(shù)據(jù)庫304,以及位于第二數(shù)據(jù)中心400的第二內(nèi)容服務(wù)器401和第二對(duì)象REDIS 402;其中,
所述第一對(duì)象REDIS 302或所述第二對(duì)象REDIS 402,用于緩存實(shí)體對(duì)象和參考對(duì)象;
所述第一版本號(hào)REDIS 303,用于分配新版本號(hào);
所述第一內(nèi)容服務(wù)器301或所述第二內(nèi)容服務(wù)器401,用于獲取所述第一對(duì)象REDIS 302或所述第二對(duì)象REDIS 402緩存的實(shí)體對(duì)象和參考對(duì)象;確定所述實(shí)體對(duì)象的版本號(hào)低于所述參考對(duì)象的版本號(hào)時(shí),獲取所述第一版本號(hào)REDIS 303分配的新版本號(hào),并根據(jù)所述新版本號(hào)獲取所述第一數(shù)據(jù)庫304重新加載的新實(shí)體對(duì)象;同步更新所述第一對(duì)象REDIS 302和所述第二對(duì)象REDIS 402緩存的實(shí)體對(duì)象為所述新實(shí)體對(duì)象。
本發(fā)明實(shí)施例中,所述第一對(duì)象REDIS 302和所述第二對(duì)象REDIS 402可以是單臺(tái)REDIS服務(wù)器,也可以是由多臺(tái)REDIS服務(wù)器組成的REDIS服務(wù)器集群。
具體地,所述第一內(nèi)容服務(wù)器301通過Jedis Wrapper向本站點(diǎn)內(nèi)第一對(duì)象REDIS 302發(fā)送對(duì)象獲取請(qǐng)求,所述第一對(duì)象REDIS 302接收到所述對(duì)象獲取請(qǐng)求后,根據(jù)所述對(duì)象獲取請(qǐng)求向所述第一內(nèi)容服務(wù)器301發(fā)送實(shí)體對(duì)象和參考對(duì)象?;蛘撸龅诙?nèi)容服務(wù)器401通過Jedis Wrapper向本站點(diǎn)內(nèi)第二對(duì)象REDIS 402發(fā)送對(duì)象獲取請(qǐng)求,所述第二對(duì)象REDIS 402接收到所述對(duì)象獲取請(qǐng)求后,根據(jù)所述對(duì)象獲取請(qǐng)求向所述第二內(nèi)容服務(wù)器401發(fā)送實(shí)體對(duì)象和參考對(duì)象。這里,所述實(shí)體對(duì)像和參考對(duì)象都是實(shí)體類的一個(gè)實(shí)例。
所述第一內(nèi)容服務(wù)器301或所述第二內(nèi)容服務(wù)器401獲取到本站點(diǎn)內(nèi)第一對(duì)象REDIS 302或第二對(duì)象REDIS 402緩存的實(shí)體對(duì)象和參考對(duì)象后,確定所述實(shí)體對(duì)象和所述參考對(duì)象的版本號(hào),并將所述實(shí)體對(duì)象的版本號(hào)與所述參考對(duì)象的版本號(hào)進(jìn)行比對(duì),得到比對(duì)結(jié)果,根據(jù)所述比對(duì)結(jié)果確定所述實(shí)體對(duì)象的版本號(hào)低于所述參考對(duì)象的版本號(hào)時(shí),向所述第一版本號(hào)REDIS 303發(fā)送新版本號(hào)獲取請(qǐng)求,所述第一版本號(hào)REDIS 303根據(jù)所述新版本號(hào)獲取請(qǐng)求,向所述第一內(nèi)容服務(wù)器301或所述第二內(nèi)容服務(wù)器401發(fā)送新版本號(hào)。這里,所述新版本號(hào)高于所述參考對(duì)象的版本號(hào)。
在本發(fā)明實(shí)施例中,所述第二數(shù)據(jù)中心400還包括第二版本號(hào)REDIS 403和第二數(shù)據(jù)庫404,所述第一內(nèi)容服務(wù)器301或所述第二內(nèi)容服務(wù)器401獲取到所述新版本號(hào)后,將所述新版本號(hào)同步更新到所述第二版本號(hào)REDIS 403,并向所述第一數(shù)據(jù)庫304發(fā)送對(duì)象加載請(qǐng)求,其中,所述對(duì)象加載請(qǐng)求中攜帶有所述新版本號(hào)。所述第一數(shù)據(jù)庫304接收到所述對(duì)象加載請(qǐng)求后,根據(jù)所述對(duì)象加載請(qǐng)求重新加載實(shí)體對(duì)象,并將重新加載的新實(shí)體對(duì)象發(fā)送給所述第一內(nèi)容服務(wù)器301或所述第二內(nèi)容服務(wù)器401,所述第一內(nèi)容服務(wù)器301或所述第二內(nèi)容服務(wù)器401接收到所述新實(shí)體對(duì)象后,將所述新實(shí)體對(duì)象同步更新到所述第二數(shù)據(jù)庫404。這里,采用在異地部署一個(gè)一模一樣的第二版本號(hào)REDIS403和第二數(shù)據(jù)庫404實(shí)現(xiàn)冷備容災(zāi)方案,可以在所述第一版本號(hào)REDIS 303和第一數(shù)據(jù)庫304所處的地理位置發(fā)生自然災(zāi)害,導(dǎo)致當(dāng)前數(shù)據(jù)庫發(fā)生災(zāi)難時(shí),所述第二版本號(hào)REDIS 403和所述第二數(shù)據(jù)庫404可以立馬頂替工作,保證業(yè)務(wù)不間斷運(yùn)行。
在本發(fā)明實(shí)施例中,為了保證第一對(duì)象REDIS 302和所述第二對(duì)象REDIS402在相同的鍵值里存入的內(nèi)容相同,所述第一內(nèi)容服務(wù)器301或所述第二內(nèi)容服務(wù)器401接收到所述第一數(shù)據(jù)庫304重新加載的新實(shí)體對(duì)象后,通過所述Jedis Wrapper同步更新所述第一對(duì)象REDIS 302和所述第二對(duì)象REDIS 402緩存的實(shí)體對(duì)象為所述新實(shí)體對(duì)象。具體地REDIS執(zhí)行緩存讀取的流程參照方法實(shí)施例中的圖2描述。
在本發(fā)明實(shí)施例中,通過在執(zhí)行讀緩存操作時(shí),只讀取本站點(diǎn)內(nèi)的REDIS服務(wù)器,而在執(zhí)行寫緩存操作時(shí),則采用雙寫的方法,同步更新雙數(shù)據(jù)中心的REDIS服務(wù)器,使得雙數(shù)據(jù)中心的REDIS服務(wù)器在相同的key里保持存儲(chǔ)的數(shù)據(jù)相同。如此,能夠提高數(shù)據(jù)傳輸速度同時(shí)能夠避免數(shù)據(jù)包丟失。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用硬件實(shí)施例、軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器和光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。