麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種基于遠程字典服務器的數據存儲方法及系統與流程

文檔序號:11155417閱讀:435來源:國知局
一種基于遠程字典服務器的數據存儲方法及系統與制造工藝

本發明涉及信息存儲技術,具體涉及一種基于遠程字典服務器的數據存儲方法及系統。



背景技術:

隨著社會進步及科技的發展,互聯網技術也得到飛速的發展,尤其是進入互聯網+時代后,互聯網企業在伴隨其業務飛速發展的同時,用戶需求也越來越復雜且多變,進而會產生巨量的數據信息,而采用傳統的存儲方案對巨量數據信息的存儲又無法滿足網絡應用平臺及用戶體驗。

遠程字典服務器(REDIS,Remote DIctionary Server)是一個鍵值(key-value)存儲系統,支持存儲字符串(string)、鏈表(list)、集合(set)、有序集合(zset-sortedset)和哈希(hash)等value類型。同時這些數據類型都支持推進/彈出(push/pop)、添加/移除(add/remove)及取交集并集和差集等更豐富的原子性操作指令。為了保證效率,REDIS數據都是緩存在內存中,并且REDIS會周期性的把更新的數據寫入磁盤、或者把修改操作指令寫入追加的記錄文件,從而能夠實現主盤和從盤(master-slave)同步。

由于現有的REDIS緩存技術對鍵值采用一致性哈希算法,將數據平均存儲到各個緩存服務器中,然后在鍵值所在的緩存服務器進行數據訪問。而采用這樣的數據存儲方法,會存在以下缺點:

1、在密集數據訪問的應用上,REDIS緩存技術傳輸時延嚴重,影響用戶感知。比如:一個操作接口需要查詢REDIS緩存1000次,且每次傳輸時延為1毫秒(millisecond),則所述操作接口的操作時延將增加1秒(second)。

2、在高并發數據訪問的情形下,REDIS緩存技術的丟包概率較大。



技術實現要素:

為解決現有存在的技術問題,本發明實施例期望提供一種基于遠程字典服務器的數據存儲方法及系統,能夠提高數據傳輸速度,同時能夠避免數據包丟失。

本發明實施例的技術方案是這樣實現的:

根據本發明實施例的一方面,提供一種基于遠程字典服務器的數據存儲方法,所述方法包括:

獲取第一對象REDIS或第二對象REDIS緩存的實體對象和參考對象,其中,所述第一對象REDIS位于第一數據中心,所述第二對象REDIS位于第二數據中心;

確定所述實體對象的版本號低于所述參考對象的版本號時,獲取第一版本號REDIS分配的新版本號,并根據所述新版本號獲取第一數據庫重新加載的新實體對象,其中,所述第一版本號REDIS和所述第一數據庫位于所述第一數據中心;

同步更新所述第一對象REDIS和所述第二對象REDIS緩存的實體對象為所述新實體對象。

上述方案中,所述獲取第一對象REDIS或第二對象REDIS緩存的實體對象和參考對象,包括:

通過REDIS的JAVA業務模塊內容中心的類Jedis Wrapper向本站點內第一對象REDIS或第二對象REDIS發送對象獲取請求;

接收所述第一對象REDIS或所述第二對象REDIS根據所述對象獲取請求發送的實體對象和參考對象。

上述方案中,所述獲取第一版本號REDIS分配的新版本號,包括:

向所述第一版本號REDIS發送新版本號獲取請求;

接收所述第一版本號REDIS根據新版本號獲取請求分配的新版本號,所述新版本號高于所述參考對象的版本號。

上述方案中,所述根據所述新版本號獲取第一數據庫重新加載的新實體對象,包括:

向所述第一數據庫發送對象加載請求,所述對象加載請求中攜帶有所述新版本號;

接收所述第一數據庫根據所述對象加載請求重新加載的新實體對象。

上述方案中,所述同步更新所述第一對象REDIS和所述第二對象REDIS緩存的實體對象為所述新實體對象,包括:

通過所述Jedis Wrapper同步更新所述第一對象REDIS和所述第二對象REDIS緩存的實體對象為所述新實體對象。

上述方案中,在所述獲取第一版本號REDIS分配的新版本號之后,所述方法還包括:

將所述新版本號同步更新到第二版本號REDIS,所述第二版本號REDIS位于所述第二數據中心。

上述方案中,在所述根據所述新版本號獲取第一數據庫重新加載的新實體對象之后,所述方法還包括:

將所述新實體對象同步更新到第二數據庫,所述第二數據庫位于所述第二數據中心。

根據本發明實施例的另一方面,提供一種基于遠程字典服務器的數據存儲系統,所述系統包括:位于第一數據中心的第一內容服務器、第一對象REDIS、第一版本號REDIS、第一數據庫,以及位于第二數據中心的第二內容服務器和第二對象REDIS;其中,

所述第一對象REDIS或所述第二對象REDIS,用于緩存實體對象和參考對象;

所述第一版本號REDIS,用于分配新版本號;

所述第一內容服務器或所述第二內容服務器,用于獲取第一對象REDIS或所述第二對象REDIS緩存的實體對象和參考對象;確定所述實體對象的版本號低于所述參考對象的版本號時,獲取所述第一版本號REDIS分配的新版本號,并根據所述新版本號獲取所述第一數據庫重新加載的新實體對象;同步更新所述第一對象REDIS和所述第二對象REDIS緩存的實體對象為所述新實體對象。

上述方案中,所述第一內容服務器或所述第二內容服務器,具體用于通過Jedis Wrapper向本站點內第一對象REDIS或第二對象REDIS發送對象獲取請求,接收所述第一對象REDIS或第二對象REDIS根據所述對象獲取請求發送的實體對象和參考對象。

上述方案中,所述第一內容服務器或所述第二內容服務器,具體還用于向所述第一版本號REDIS發送新版本號獲取請求,接收所述第一版本號REDIS根據所述新版本號獲取請求分配的新版本號,所述新版本號高于所述參考對象的版本號。

上述方案中,所述第一內容服務器或所述第二內容服務器,具體還用于向所述第一數據庫發送對象加載請求,所述對象加載請求中攜帶有所述新版本號;接收所述第一數據庫根據所述對象加載請求重新加載的新實體對象。

上述方案中,所述第一內容服務器或所述第二內容服務器,具體用于通過Jedis Wrapper同步更新所述第一對象REDIS和所述第二對象REDIS緩存的實體對象為所述新實體對象。

上述方案中,所述系統還包括第二版本號REDIS;

所述第一內容服務器或所述第二內容服務器,具體還用于將所述新版本號同步更新到第二版本號REDIS,所述第二版本號REDIS位于所述第二數據中心。

上述方案中,所述系統還包括第二數據庫;

所述第一內容服務器或所述第二內容服務器,具體還用于將所述新實體對象同步更新到第二數據庫,所述第二數據庫位于所述第二數據中心。

本發明實施例提供一種基于遠程字典服務器的數據存儲方法及系統,通過獲取第一對象REDIS或第二對象REDIS緩存的實體對象和參考對象,其中,所述第一對象REDIS位于第一數據中心,所述第二對象REDIS位于第二數據中心;確定所述實體對象的版本號低于所述參考對象的版本號時,獲取第一版本號REDIS分配的新版本號,并根據所述新版本號獲取第一數據庫重新加載的新實體對象,其中,所述第一版本號REDIS和所述第一數據庫位于所述第一數據中心;同步更新所述第一對象REDIS和所述第二對象REDIS緩存的實體對象為所述新實體對象。如此,在執行讀緩存操作時,只讀取本站點內的REDIS服務器,而在執行寫緩存操作時,則采用雙寫的方法,同步更新雙數據中心的REDIS服務器,使得雙數據中心的REDIS服務器在相同的鍵值里保持存儲的數據相同。這樣,能夠提高數據傳輸速度同時能夠避免數據包丟失。

附圖說明

圖1為本發明實施例一種基于遠程字典服務器的數據存儲方法的流程示意圖;

圖2為本發明實施例中REDIS執行緩存讀取的流程示意圖;

圖3為本發明實施例一種基于遠程字典服務器的數據存儲系統的結構組成示意圖。

具體實施方式

下面結合附圖對本發明的具體實施方式進行詳細說明。應當理解的是,此處所描述的具體實施方式僅用于說明和解釋本發明,并不用于限制本發明。

圖1為一種基于遠程字典服務器的數據存儲方法的流程示意圖;如圖1所示,該方法包括:

步驟101,獲取第一對象REDIS或第二對象REDIS緩存的實體對象和參考對象,其中,所述第一對象REDIS位于第一數據中心,所述第二對象REDIS位于第二數據中心;

本發明實施例的方法主要應用在雙數據中心,所述雙數據中心包括第一數據中心和第二數據中心,其中,所述第一對象REDIS位于所述第一數據中心,所述第二對象REDIS位于所述第二數據中心。

在本發明實施例中,所述第一對象REDIS和所述第二對象REDIS可以是單臺REDIS服務器,也可以是多臺REDIS服務器組成的REDIS服務器集群。

具體地,所述第一數據中心的第一內容服務器通過REDIS的JAVA業務模塊內容中心的類(Jedis Wrapper)向本站點內第一對象REDIS發送對象獲取請求,所述第一對象REDIS接收到所述對象獲取請求后,根據所述對象獲取請求向所述第一內容服務器發送實體對象和參考對象。或者,所述第二數據中心的第二內容服務器通過Jedis Wrapper向本站點內第二對象REDIS發送對象獲取請求,所述第二對象REDIS接收到所述對象獲取請求后,根據所述對象獲取請求向所述第二內容服務器發送實體對象和參考對象。

這里,所述實體對像和參考對象都是實體類的一個實例。具體地,實體是用于傳遞數據的一種數據載體,在三層架構(3-tier architecture)中會分一個實體層,而數據庫中的每一張表叫做實體集,在程序中為了消除數據庫的關系模型,使之面向對象,會對數據庫中的表各寫一個實體,而實體對像和參考對象就是實體類的一個實例。

步驟102,確定所述實體對象的版本號低于所述參考對象的版本號時,獲取第一版本號REDIS分配的新版本號,并根據所述新版本號獲取第一數據庫重新加載的新實體對象,其中,所述第一版本號REDIS和所述第一數據庫位于所述第一數據中心;

這里,所述第一數據中心或所述第二數據中心獲取到本站點內第一對象REDIS或第二對象REDIS緩存的實體對象和參考對象后,確定所述實體對象和所述參考對象的版本號,并將所述實體對象的版本號與所述參考對象的版本號進行比對,得到比對結果,根據所述比對結果確定所述實體對象是否處于有效的緩存狀態。

具體地,當根據所述比對結果確定所述實體對象的版本號低于所述參考對象的版本號時,確定所述實體對象的緩存狀態為失效狀態,則向所述第一數據中心的第一版本號REDIS發送新版本號獲取請求,所述第一版本號REDIS根據所述新版本號獲取請求,向所述第一數據中心或所述第二數據中心發送新版本號。

這里,所述新版本號高于所述參考對象的版本號;所述第一數據中心或所述第二數據中心獲取到所述新版本號后,將所述新版本號同步更新到第二數據中心的第二版本號REDIS,并向第一數據中心的第一數據庫發送對象加載請求,其中,所述對象加載請求中攜帶有所述新版本號。所述第一數據庫接收到所述對象加載請求后,根據所述對象加載請求重新加載實體對象,并將重新加載的新實體對象發送給所述第一數據中心或所述第二數據中心,所述第一數據中心或所述第二數據中心接收到所述新實體對象后,將所述新實體對象同步更新到所述第二數據中心的第二數據庫。這里,采用在異地部署一個一模一樣的第二版本號REDIS和第二數據庫實現冷備容災方案,可以在所述第一版本號REDIS和第一數據庫所處的地理位置發生自然災害,導致當前數據庫發生災難時,所述第二版本號REDIS和所述第二數據庫可以立馬頂替工作,保證業務不間斷運行。

在本發明實施例中,所述第一對象REDIS、所述第二對象REDIS、所述第一版本號REDIS和所述第二版本號REDIS可以分別是由一臺REDIS服務器組成,也可以分別是由多臺REDIS服務器組成的版本號REDIS服務器集群。

步驟103,同步更新所述第一對象REDIS和所述第二對象REDIS緩存的實體對象為所述新實體對象。

這里,為了保證第一對象REDIS和所述第二對象REDIS在相同的key里存入的內容相同,所述第一數據中心或所述第二數據中心接收到所述第一數據庫重新加載的新實體對象后,通過所述Jedis Wrapper同步更新所述第一對象REDIS和所述第二對象REDIS緩存的實體對象為所述新實體對象。

圖2為本發明實施例中REDIS執行緩存讀取的流程示意圖;如圖2所示,以第二數據中心為例進行詳細說明,具體流程包括:

步驟201,第二數據中心的第二內容服務器向本站點內的緩存中心發送讀取緩存實體對象的請求;

步驟202,所述緩存中心接收所述讀取緩存實體對象的請求,并向本站點內的Jedis Wrapper發送所述讀取緩存實體對象的請求;

步驟203,所述Jedis Wrapper接收所述讀取緩存實體對象的請求,并將所述讀取緩存實體對象的請求路由至本站點的第二對象REDIS;

步驟204,所述第二對象REDIS接收所述讀取緩存實體對象的請求,并根據所述讀取緩存實體對象的請求,向所述Jedis Wrapper發送所述讀取緩存實體對象的請求所針對的實體對象和參考對象;

步驟205,所述Jedis Wrapper接收所述實體對象和參考對象,并將所述實體對象和參考對象發送給所述緩存中心;

步驟206,所述緩存中心接收所述實體對象和參考對象,并比較所述實體對象和參考對象的版本號;

這里,緩存中心每請求讀取一個緩存的實體對象,都會將調取出的所述實體對象與參考對象的版本號進行比較,根據比較結果確定所述實體對象的緩存狀態是否處于有效狀態。具體地,當所述實體對象的版本號高于所述參考對象的版本號時,表示所述實體對象的緩存狀態為有效狀態;當所述實體對象的版本號低于所述參考對象的版本號時,表示所述實體對象的緩存狀態為失效狀態。

步驟207,緩存中心確定所述實體對象的版本號低于所述參考對象的版本號時,向第一數據中心的第一版本號REDIS發送新版本號獲取請求;

步驟208,第一版本號REDIS接收所述新版本號獲取請求,并根據所述新版本號獲取請求向所述緩存中心分配新版本號;

這里,所述新版本號高于所述參考對象的版本號。

步驟209,緩存中心向本站點內的第二數據庫發送對象加載請求,并將新版本號向第一數據中心的第一數據庫發送;

這里,所述對象加載請求中攜帶所述新版本號。

步驟210,第一數據庫向緩存中心發送重新加載的新實體對象;

步驟211,緩存中心根據所述新實體對象更新緩存,并觸發所述JedisWrapper進行雙寫數據的操作;

這里,所述雙寫數據的操作是指,將所述新實體對象同步更新到所述第一數據中心的第一對象REDIS和第二數據中心的第二對象REDIS。

步驟212,Jedis Wrapper根據緩存中心的觸發操作,將第二對象REDIS緩存的實體對象更新為所述新實體對象;

步驟213,第二對象REDIS向所述Jedis Wrapper發送更新結果;

步驟214,Jedis Wrapper接收第二對象REDIS發送的所述更新結果;

步驟215,Jedis Wrapper根據所述更新結果,向所述緩存中心發送新加載的實體對象;

步驟216,緩存中心接收所述新加載的實體對象,并向所述內容服務器發送新實體對象;

步驟217,Jedis Wrapper根據緩存中心的觸發操作,將第一數據中心中的第一對象REDIS緩存的實體對象更新為所述新實體對象;

步驟218,第一對象REDIS向Jedis Wrapper發送更新結果。

在本發明實施例中,第一數據中心執行緩存讀取的方法與第二數據中心執行緩存讀取的方法大致相同,其不同之處在于,所述第一數據中心對獲取到的實體對象和參考對象進行比較之后,確定實體對象的版本號低于參考對象的版本號時,也是向第一數據中心的第一版本號REDIS發送新版本號獲取請求,并接收所述第一版本號REDIS根據所述新版本號獲取請求發送的新版本號,所述新版本號高于參考對象的版本號。

本發明實施例與現有技術相比,通過在執行讀緩存操作時,只讀取本站點內的REDIS服務器,而在執行寫緩存操作時,則采用雙寫的方法,同步寫入雙數據中心的REDIS服務器,使得雙數據中心的REDIS服務器在相同的key里保持存儲的數據相同。如此,能夠提高數據傳輸速度同時能夠避免數據包丟失。

圖3為本發明實施例基于遠程字典服務器的數據存儲系統的結構示意圖,如圖3所示,所述系統包括:位于第一數據中心300的第一內容服務器301、第一對象REDIS 302、第一版本號REDIS 303、第一數據庫304,以及位于第二數據中心400的第二內容服務器401和第二對象REDIS 402;其中,

所述第一對象REDIS 302或所述第二對象REDIS 402,用于緩存實體對象和參考對象;

所述第一版本號REDIS 303,用于分配新版本號;

所述第一內容服務器301或所述第二內容服務器401,用于獲取所述第一對象REDIS 302或所述第二對象REDIS 402緩存的實體對象和參考對象;確定所述實體對象的版本號低于所述參考對象的版本號時,獲取所述第一版本號REDIS 303分配的新版本號,并根據所述新版本號獲取所述第一數據庫304重新加載的新實體對象;同步更新所述第一對象REDIS 302和所述第二對象REDIS 402緩存的實體對象為所述新實體對象。

本發明實施例中,所述第一對象REDIS 302和所述第二對象REDIS 402可以是單臺REDIS服務器,也可以是由多臺REDIS服務器組成的REDIS服務器集群。

具體地,所述第一內容服務器301通過Jedis Wrapper向本站點內第一對象REDIS 302發送對象獲取請求,所述第一對象REDIS 302接收到所述對象獲取請求后,根據所述對象獲取請求向所述第一內容服務器301發送實體對象和參考對象。或者,所述第二內容服務器401通過Jedis Wrapper向本站點內第二對象REDIS 402發送對象獲取請求,所述第二對象REDIS 402接收到所述對象獲取請求后,根據所述對象獲取請求向所述第二內容服務器401發送實體對象和參考對象。這里,所述實體對像和參考對象都是實體類的一個實例。

所述第一內容服務器301或所述第二內容服務器401獲取到本站點內第一對象REDIS 302或第二對象REDIS 402緩存的實體對象和參考對象后,確定所述實體對象和所述參考對象的版本號,并將所述實體對象的版本號與所述參考對象的版本號進行比對,得到比對結果,根據所述比對結果確定所述實體對象的版本號低于所述參考對象的版本號時,向所述第一版本號REDIS 303發送新版本號獲取請求,所述第一版本號REDIS 303根據所述新版本號獲取請求,向所述第一內容服務器301或所述第二內容服務器401發送新版本號。這里,所述新版本號高于所述參考對象的版本號。

在本發明實施例中,所述第二數據中心400還包括第二版本號REDIS 403和第二數據庫404,所述第一內容服務器301或所述第二內容服務器401獲取到所述新版本號后,將所述新版本號同步更新到所述第二版本號REDIS 403,并向所述第一數據庫304發送對象加載請求,其中,所述對象加載請求中攜帶有所述新版本號。所述第一數據庫304接收到所述對象加載請求后,根據所述對象加載請求重新加載實體對象,并將重新加載的新實體對象發送給所述第一內容服務器301或所述第二內容服務器401,所述第一內容服務器301或所述第二內容服務器401接收到所述新實體對象后,將所述新實體對象同步更新到所述第二數據庫404。這里,采用在異地部署一個一模一樣的第二版本號REDIS403和第二數據庫404實現冷備容災方案,可以在所述第一版本號REDIS 303和第一數據庫304所處的地理位置發生自然災害,導致當前數據庫發生災難時,所述第二版本號REDIS 403和所述第二數據庫404可以立馬頂替工作,保證業務不間斷運行。

在本發明實施例中,為了保證第一對象REDIS 302和所述第二對象REDIS402在相同的鍵值里存入的內容相同,所述第一內容服務器301或所述第二內容服務器401接收到所述第一數據庫304重新加載的新實體對象后,通過所述Jedis Wrapper同步更新所述第一對象REDIS 302和所述第二對象REDIS 402緩存的實體對象為所述新實體對象。具體地REDIS執行緩存讀取的流程參照方法實施例中的圖2描述。

在本發明實施例中,通過在執行讀緩存操作時,只讀取本站點內的REDIS服務器,而在執行寫緩存操作時,則采用雙寫的方法,同步更新雙數據中心的REDIS服務器,使得雙數據中心的REDIS服務器在相同的key里保持存儲的數據相同。如此,能夠提高數據傳輸速度同時能夠避免數據包丟失。

本領域內的技術人員應明白,本發明的實施例可提供為方法、系統、或計算機程序產品。因此,本發明可采用硬件實施例、軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器和光學存儲器等)上實施的計算機程序產品的形式。

本發明是參照根據本發明實施例的方法、設備(系統)、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。

這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。

這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。

以上所述,僅為本發明的較佳實施例而已,并非用于限定本發明的保護范圍。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 济宁市| 通州区| 景泰县| 内丘县| 剑川县| 睢宁县| 九龙坡区| 泸溪县| 武川县| 湘潭市| 新竹市| 将乐县| 翁源县| 日土县| 彭阳县| 辽源市| 响水县| 安多县| 龙井市| 湖北省| 佛坪县| 积石山| 怀柔区| 轮台县| 彩票| 中超| 漠河县| 亳州市| 厦门市| 锡林郭勒盟| 香河县| 云和县| 姜堰市| 饶河县| 任丘市| 扎鲁特旗| 阿图什市| 垦利县| 鱼台县| 寿阳县| 任丘市|