一種緩存數(shù)據(jù)的更新方法、數(shù)據(jù)使用端和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種緩存數(shù)據(jù)的更新方法、數(shù)據(jù)使用端和系統(tǒng)。
【背景技術(shù)】
[0002]在網(wǎng)絡(luò)中,有大量的配置數(shù)據(jù),這些配置數(shù)據(jù)是對業(yè)務(wù)的提煉,通過對配置數(shù)據(jù)的變更可以實現(xiàn)對各種不同業(yè)務(wù)的支撐。配置數(shù)據(jù)一般保存在數(shù)據(jù)庫中,數(shù)據(jù)使用端在需要配置數(shù)據(jù)時,從數(shù)據(jù)庫中直接獲取。而隨著網(wǎng)絡(luò)規(guī)模的不斷擴大,其所需處理的業(yè)務(wù)量不斷增多,目前,一般采取將配置數(shù)據(jù)預(yù)先加載到緩存區(qū)域中,以緩解數(shù)據(jù)庫不斷接收大量的配置數(shù)據(jù)查詢的壓力,那么數(shù)據(jù)庫中的數(shù)據(jù)與緩存區(qū)域的配置數(shù)據(jù)之間的同步更新顯得十分重要。
[0003]目前,關(guān)于數(shù)據(jù)庫中的配置數(shù)據(jù)與緩存區(qū)域的緩存配置數(shù)據(jù)對象之間的同步更新的方法主要有兩種,分別為定時更新和按需更新。定時更新是設(shè)定一定時間,緩存配置數(shù)據(jù)對象根據(jù)數(shù)據(jù)庫更新情況進(jìn)行更新,即直接刪除及替換原有數(shù)據(jù);按需更新指的是訪問緩存配置數(shù)據(jù)對象時,先判斷下本地緩存數(shù)據(jù)對象是否需要更新,也就是從數(shù)據(jù)庫獲取一份新配置數(shù)據(jù),然后和現(xiàn)有緩存配置數(shù)據(jù)進(jìn)行比較,如果數(shù)據(jù)庫規(guī)則數(shù)據(jù)與緩存配置數(shù)據(jù)不同,則將緩存配置數(shù)據(jù)進(jìn)行更新,即直接刪除及替換原有數(shù)據(jù)。
[0004]在緩存配置數(shù)據(jù)更新過程中,緩存配置數(shù)據(jù)的更新現(xiàn)有技術(shù)會直接刪除及替換原有數(shù)據(jù)。這樣,一旦更新過程中出錯,新版本和原有版本的緩存數(shù)據(jù)都無法使用,從而無法保證有可用的緩存數(shù)據(jù)。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種緩存數(shù)據(jù)的更新方法、數(shù)據(jù)使用端和系統(tǒng),以保證有可用的緩存數(shù)據(jù)。
[0006]本發(fā)明提供一種緩存數(shù)據(jù)的更新方法,其數(shù)據(jù)使用端初始化形成緩存數(shù)據(jù)對象的主用槽位和備用槽位,包括:
[0007]數(shù)據(jù)使用端從數(shù)據(jù)庫加載配置數(shù)據(jù),構(gòu)造緩存數(shù)據(jù)對象,將緩存數(shù)據(jù)對象緩存在當(dāng)前的主用槽位中,形成槽位索引,指向該當(dāng)前的主用槽位;
[0008]當(dāng)觸發(fā)緩存數(shù)據(jù)對象的更新時,數(shù)據(jù)使用端從數(shù)據(jù)庫加載更新后的配置數(shù)據(jù),構(gòu)造更新后的緩存數(shù)據(jù)對象,保留當(dāng)前主用槽位中的緩存數(shù)據(jù)對象,并將更新后的緩存數(shù)據(jù)對象緩存在備用槽位中;然后,將當(dāng)前主用槽位切換為備用槽位,當(dāng)前備用槽位切換為主用槽位,將槽位索引的指向更新為切換后的當(dāng)前主用槽位。
[0009]優(yōu)選地,所述主用槽位和備用槽位包括:2個元素的數(shù)組。
[0010]優(yōu)選地,在所述數(shù)據(jù)使用端從數(shù)據(jù)庫加載配置數(shù)據(jù)之前,進(jìn)一步包括:配置服務(wù)器接收并保存數(shù)據(jù)使用端發(fā)送的注冊信息,所述注冊信息包括:所述數(shù)據(jù)使用端的IP地址、通知接收端口號、使用配置數(shù)據(jù)的名稱信息;根據(jù)所述注冊信息,生成對應(yīng)的配置數(shù)據(jù)版本號;將所述配置數(shù)據(jù)版本號發(fā)送給所述數(shù)據(jù)使用端,所述配置數(shù)據(jù)版本號包括:配置數(shù)據(jù)名稱和版本號字符串;
[0011]所述數(shù)據(jù)使用端從數(shù)據(jù)庫加載配置數(shù)據(jù)包括:所述數(shù)據(jù)使用端根據(jù)接收到的所述配置數(shù)據(jù)版本號,從數(shù)據(jù)庫加載對應(yīng)的配置數(shù)據(jù);
[0012]觸發(fā)緩存數(shù)據(jù)對象的更新包括:數(shù)據(jù)變更端向配置服務(wù)器發(fā)送新的配置數(shù)據(jù)版本號;配置服務(wù)器向所述數(shù)據(jù)使用端發(fā)送更新所述配置數(shù)據(jù)版本號通知,該通知中攜帶新的配置數(shù)據(jù)版本號,觸發(fā)所述數(shù)據(jù)使用端開啟新的線程;
[0013]所述數(shù)據(jù)使用端從數(shù)據(jù)庫加載更新后的配置數(shù)據(jù)包括:所述數(shù)據(jù)使用端接收所述通知,從中獲取所述新的配置數(shù)據(jù)版本號,根據(jù)所述新的配置數(shù)據(jù)版本號,從所述數(shù)據(jù)庫加載新的配置數(shù)據(jù)。
[0014]優(yōu)選地,向所述數(shù)據(jù)使用端發(fā)送更新所述配置數(shù)據(jù)版本號通知,包括:
[0015]所述配置服務(wù)器遍歷當(dāng)前注冊的數(shù)據(jù)使用端,查找使用了所述配置數(shù)據(jù)的所有數(shù)據(jù)使用端,向查找到的所有數(shù)據(jù)使用端發(fā)送更新所述配置數(shù)據(jù)版本號通知。
[0016]優(yōu)選地,所述數(shù)據(jù)使用端接收所述通知包括:
[0017]所述數(shù)據(jù)使用端啟動socket監(jiān)聽,監(jiān)聽通知接收端口用以接收配置服務(wù)器發(fā)來的所述通知。
[0018]優(yōu)選地,判斷所述數(shù)據(jù)使用端是否完成所述加載新的配置數(shù)據(jù),包括:
[0019]所述配置服務(wù)器接收所述數(shù)據(jù)使用端發(fā)送的所述槽位索引對應(yīng)的配置信息版本號,與所述配置服務(wù)器中存在的所述新的配置信息版本號進(jìn)行比對,如果一致,則完成所述加載新的配置數(shù)據(jù),否則,所述加載新的配置數(shù)據(jù)失敗。
[0020]本發(fā)明還提供一種數(shù)據(jù)使用端,包括:
[0021]形成單元,用于初始化形成緩存數(shù)據(jù)對象的主用槽位和備用槽位;
[0022]緩存執(zhí)行單元,用于從外部數(shù)據(jù)庫加載配置數(shù)據(jù),構(gòu)造緩存數(shù)據(jù)對象,將緩存數(shù)據(jù)對象緩存在當(dāng)前的主用槽位中,形成槽位索引,指向該當(dāng)前的主用槽位;當(dāng)被觸發(fā)更新操作時,從外部數(shù)據(jù)庫加載更新后的配置數(shù)據(jù),構(gòu)造更新后的緩存數(shù)據(jù)對象,并將更新后的緩存數(shù)據(jù)對象緩存在備用槽位中;
[0023]控制單元,用于控制所述緩存執(zhí)行單元在將更新后的緩存數(shù)據(jù)對象緩存在備用槽位中時,保留當(dāng)前主用槽位中的緩存數(shù)據(jù)對象,在緩存執(zhí)行單元將將更新后的緩存數(shù)據(jù)對象緩存在備用槽位中完畢后,將當(dāng)前主用槽位切換為備用槽位,當(dāng)前備用槽位切換為主用槽位,將槽位索引的指向更新為切換后的當(dāng)前主用槽位。
[0024]優(yōu)選地,所述形成單元,用于生成2個元素的數(shù)組,作為所述主用槽位和備用槽位。
[0025]本發(fā)明還提供一種緩存數(shù)據(jù)的更新系統(tǒng),包括:前面所述的數(shù)據(jù)使用端,配置服務(wù)器,數(shù)據(jù)變更端以及數(shù)據(jù)庫,
[0026]配置服務(wù)器,用于通知所述數(shù)據(jù)使用端需要加載及更新的配置數(shù)據(jù)的索引,
[0027]數(shù)據(jù)變更端,用于在數(shù)據(jù)庫配置數(shù)據(jù)變更后,觸發(fā)配置服務(wù)器通知所述數(shù)據(jù)使用端更新的配置數(shù)據(jù)的索引。
[0028]優(yōu)選地,配置服務(wù)器包括:
[0029]用于接收并保存數(shù)據(jù)使用端發(fā)送的注冊信息,所述注冊信息包括:所述數(shù)據(jù)使用端的IP地址、通知接收端口號、使用配置數(shù)據(jù)的名稱信息;
[0030]用于根據(jù)所述注冊信息,生成對應(yīng)的配置數(shù)據(jù)版本號;
[0031]用于將所述配置數(shù)據(jù)版本號發(fā)送給所述數(shù)據(jù)使用端,所述配置數(shù)據(jù)版本號包括:配置數(shù)據(jù)名稱和版本號字符串。
[0032]本
【發(fā)明內(nèi)容】
提供了一種緩存數(shù)據(jù)的更新方法、數(shù)據(jù)使用端和系統(tǒng),能夠達(dá)到如下有益效果:
[0033]1.保證有可用的緩存數(shù)據(jù)。數(shù)據(jù)使用端初始化形成緩存數(shù)據(jù)對象的主用槽位和備用槽位,當(dāng)從數(shù)據(jù)庫加載配置數(shù)據(jù),構(gòu)造緩存數(shù)據(jù)對象,將緩存數(shù)據(jù)對象緩存在當(dāng)前的主用槽位中,形成槽位索引,指向該當(dāng)前的主用槽位,即可直接調(diào)用主槽位中的緩存數(shù)據(jù)使用;當(dāng)觸發(fā)緩存數(shù)據(jù)的更新時,所述數(shù)據(jù)庫使用端保留當(dāng)前主用槽位中的緩存數(shù)據(jù),并將更新的緩存數(shù)據(jù)對象緩存在備用槽位中,并不會影響當(dāng)前主槽位中的緩存數(shù)據(jù);當(dāng)緩存數(shù)據(jù)對象更新過程中或更新失敗,數(shù)據(jù)使用端仍可調(diào)用當(dāng)前主槽位中的緩存數(shù)據(jù);當(dāng)緩存數(shù)據(jù)對象更新成功后,當(dāng)前主用槽位切換為備用槽位,當(dāng)前備用槽位切換為主用槽位,將槽位索引的指向更新為切換后的主用槽位。這樣,即使更新過程出錯,還可以使用主槽位中的原有版本數(shù)據(jù),從而保證有可用的緩存數(shù)據(jù)。
[0034]2.提高業(yè)務(wù)處理效率?,F(xiàn)有技術(shù)中,緩存數(shù)據(jù)更新過程中,需對緩存區(qū)域進(jìn)行鎖保護(hù),使得緩存數(shù)據(jù)更新過程不可用,導(dǎo)致業(yè)務(wù)處理暫停,而本發(fā)明數(shù)據(jù)使用端初始化形成緩存數(shù)據(jù)對象的主用槽位和備用槽位,其中,主槽位用于緩存當(dāng)前業(yè)務(wù)處理過程中所用的緩存數(shù)據(jù),備用槽位用于緩存數(shù)據(jù)庫加載更新后的配置數(shù)據(jù),即備用槽位緩存數(shù)據(jù)更新過程不會影響主槽位中緩存數(shù)據(jù)的應(yīng)用,因此,在緩存數(shù)據(jù)更新過程中或者緩存數(shù)據(jù)更新失敗,業(yè)務(wù)均可連續(xù)處理,從而有效提高了業(yè)務(wù)處理效率。
[0035]3、保證緩存數(shù)據(jù)及時更新。在本發(fā)明實施例中