亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

分布式緩存和本地緩存的更新方法和系統(tǒng)的制作方法

文檔序號(hào):10655306閱讀:459來(lái)源:國(guó)知局
分布式緩存和本地緩存的更新方法和系統(tǒng)的制作方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種分布式緩存和本地緩存的更新方法和系統(tǒng),包括:建立一分布式緩存,其存儲(chǔ)有若干數(shù)據(jù)項(xiàng)和每一數(shù)據(jù)項(xiàng)的過(guò)期時(shí)長(zhǎng),每一數(shù)據(jù)項(xiàng)分別與一更新鍵對(duì)應(yīng);判斷分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng),并在判斷結(jié)果為是時(shí)進(jìn)入執(zhí)行:向存在無(wú)效數(shù)據(jù)項(xiàng)的分布式緩存的客戶(hù)端節(jié)點(diǎn)串行插入無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的更新鍵,并在其中一客戶(hù)端節(jié)點(diǎn)的更新鍵插入成功時(shí),從一數(shù)據(jù)源中獲取無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)以更新分布式緩存中的無(wú)效數(shù)據(jù)項(xiàng),并記錄無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)刻。本發(fā)明保證只有一個(gè)更新鍵插入成功的客戶(hù)端節(jié)點(diǎn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),大大降低了對(duì)數(shù)據(jù)庫(kù)進(jìn)行大批量訪問(wèn)所造成的訪問(wèn)壓力,不會(huì)出現(xiàn)驚群效應(yīng),使得數(shù)據(jù)庫(kù)能夠保持穩(wěn)定。
【專(zhuān)利說(shuō)明】
分布式緩存和本地緩存的更新方法和系統(tǒng)
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及一種分布式緩存和本地緩存的更新方法和系統(tǒng)?!颈尘凹夹g(shù)】
[0002]分布式緩存是由一個(gè)服務(wù)端實(shí)現(xiàn)管理和控制,有多個(gè)客戶(hù)端節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù),可以進(jìn)一步提高數(shù)據(jù)的讀取速率的緩存系統(tǒng)。而本地緩存是將客戶(hù)機(jī)本地的物理內(nèi)存劃分出一部分空間用來(lái)緩沖客戶(hù)機(jī)回寫(xiě)到服務(wù)器的數(shù)據(jù)。通常,分布式緩存內(nèi)和本地緩存內(nèi)存儲(chǔ)的數(shù)據(jù)都需要及時(shí)更新,以在用戶(hù)向服務(wù)器端訪問(wèn)數(shù)據(jù)時(shí),能夠從緩存內(nèi)獲得最新最準(zhǔn)確的數(shù)據(jù)。然而,現(xiàn)有技術(shù)中分布式緩存內(nèi)的數(shù)據(jù)在過(guò)期時(shí)會(huì)大批量地向數(shù)據(jù)源請(qǐng)求最新的數(shù)據(jù),易出現(xiàn)驚群效應(yīng),從而會(huì)對(duì)數(shù)據(jù)庫(kù)造成極大的訪問(wèn)壓力,使得數(shù)據(jù)庫(kù)不穩(wěn)定,因此現(xiàn)有技術(shù)中的分布式緩存的更新方法亟待改進(jìn)。
【發(fā)明內(nèi)容】

[0003]本發(fā)明要解決的技術(shù)問(wèn)題是為了克服現(xiàn)有技術(shù)中的分布式緩存內(nèi)的數(shù)據(jù)過(guò)期時(shí), 會(huì)大批量地向數(shù)據(jù)源請(qǐng)求最新的數(shù)據(jù),易出現(xiàn)驚群效應(yīng),從而會(huì)對(duì)數(shù)據(jù)庫(kù)造成極大的訪問(wèn)壓力,使得數(shù)據(jù)庫(kù)不穩(wěn)定的缺陷,提供一種分布式緩存和本地緩存的更新方法和系統(tǒng)。
[0004]本發(fā)明是通過(guò)下述技術(shù)方案解決上述技術(shù)問(wèn)題的:
[0005]—種分布式緩存的更新方法,其特點(diǎn)在于,包括:
[0006]S1、建立一分布式緩存,所述分布式緩存內(nèi)存儲(chǔ)有若干數(shù)據(jù)項(xiàng)和每一數(shù)據(jù)項(xiàng)的過(guò)期時(shí)長(zhǎng),每一數(shù)據(jù)項(xiàng)分別與一更新鍵對(duì)應(yīng);
[0007]S2、根據(jù)所述數(shù)據(jù)項(xiàng)的內(nèi)容和所述過(guò)期時(shí)長(zhǎng)判斷所述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng),并在判斷結(jié)果為是時(shí)進(jìn)入步驟S3,
[0008]S3、向存在無(wú)效數(shù)據(jù)項(xiàng)的所述分布式緩存的客戶(hù)端節(jié)點(diǎn)串行插入所述無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的更新鍵,并在其中一客戶(hù)端節(jié)點(diǎn)的更新鍵插入成功時(shí),從一數(shù)據(jù)源中獲取所述無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)以更新所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng),并記錄所述無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)刻。
[0009]在本方案中,利用爭(zhēng)搶更新鍵的機(jī)制更新分布式緩存,有效減少了請(qǐng)求數(shù)據(jù)源(如 DB,database,數(shù)據(jù)庫(kù))的次數(shù),保證了 DB的穩(wěn)定性,徹底實(shí)現(xiàn)了緩存跟集群規(guī)模請(qǐng)求無(wú)關(guān)性,有利于集群的橫向擴(kuò)展,并且隨著不同集群的機(jī)器數(shù)量的增加,分?jǐn)偭烁鳈C(jī)器填充緩存的請(qǐng)求調(diào)用,反而減輕了各機(jī)器的負(fù)載。利用對(duì)數(shù)據(jù)項(xiàng)是否無(wú)效的檢測(cè)機(jī)制,可以實(shí)時(shí)更新數(shù)據(jù),提高客戶(hù)端的數(shù)據(jù)新鮮度和響應(yīng)時(shí)間。
[0010]較佳地,所述數(shù)據(jù)項(xiàng)的內(nèi)容包括數(shù)據(jù)鍵和所述數(shù)據(jù)鍵的鍵值,步驟S2中根據(jù)所述數(shù)據(jù)項(xiàng)的內(nèi)容和所述過(guò)期時(shí)長(zhǎng)判斷所述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng)包括:
[0011]S21、判斷所述數(shù)據(jù)鍵的鍵值是否不存在,若是,所述數(shù)據(jù)項(xiàng)則為無(wú)效數(shù)據(jù)項(xiàng);若否, 執(zhí)行步驟S22 ;
[0012]S22、判斷所述數(shù)據(jù)鍵的鍵值是否達(dá)到所述過(guò)期時(shí)長(zhǎng),若是,所述數(shù)據(jù)項(xiàng)則為無(wú)效數(shù)據(jù)項(xiàng)。
[0013]較佳地,步驟S21在判斷結(jié)果為是時(shí),步驟S3中以同步請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新;步驟S22在判斷結(jié)果為是時(shí),步驟S3中以異步請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新。
[0014]較佳地,所述更新鍵存儲(chǔ)于一第二分布式緩存中,所述更新方法包括:
[0015]S41、判斷同一客戶(hù)端節(jié)點(diǎn)的更新鍵插入失敗的次數(shù)是否達(dá)到一次數(shù)閾值,若是,將所述更新鍵存儲(chǔ)于一數(shù)據(jù)庫(kù)中。
[0016]在本方案中,利用第二分布式緩存和數(shù)據(jù)庫(kù)存儲(chǔ)更新鍵的機(jī)制,提高系統(tǒng)的穩(wěn)定性,保證了數(shù)據(jù)項(xiàng)的及時(shí)更新和輸出。
[0017]較佳地,步驟&在外部設(shè)備向所述分布式緩存請(qǐng)求所述數(shù)據(jù)項(xiàng)時(shí)執(zhí)行所述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng)的判斷,或者周期性地執(zhí)行所述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng)的判斷。
[0018]較佳地,步驟&之后還包括:
[0019]S42、判斷所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)長(zhǎng)是否超過(guò)一時(shí)長(zhǎng)閾值,若是,返回步驟&。
[0020]較佳地,步驟&中當(dāng)所述更新鍵插入失敗時(shí)以同步請(qǐng)求的方式再次獲取分布式緩存內(nèi)的數(shù)據(jù)項(xiàng),和/或,步驟S3中當(dāng)所述無(wú)效數(shù)據(jù)項(xiàng)更新完成時(shí),以同步請(qǐng)求的方式返回更新了的數(shù)據(jù)項(xiàng)。
[0021]本發(fā)明還提供一種本地緩存的更新方法,其特點(diǎn)在于,其利用如上所述的分布式緩存的更新方法中已更新的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。[〇〇22]較佳地,當(dāng)利用分布式緩存的更新方法中已更新的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)失敗時(shí),通過(guò)從所述數(shù)據(jù)源中獲取所述數(shù)據(jù)項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)的方式更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。
[0023]本發(fā)明還提供一種分布式緩存的更新系統(tǒng),其特點(diǎn)在于,包括一建立模塊、一判斷模塊和一插入并更新模塊;[0〇24]所述建立模塊用于建立一分布式緩存,所述分布式緩存內(nèi)存儲(chǔ)有若干數(shù)據(jù)項(xiàng)和每一數(shù)據(jù)項(xiàng)的過(guò)期時(shí)長(zhǎng),每一數(shù)據(jù)項(xiàng)分別與一更新鍵對(duì)應(yīng);
[0025]所述判斷模塊用于根據(jù)所述數(shù)據(jù)項(xiàng)的內(nèi)容和所述過(guò)期時(shí)長(zhǎng)判斷所述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng),并在判斷結(jié)果為是時(shí)調(diào)用所述插入并更新模塊;
[0026]所述插入并更新模塊用于向存在無(wú)效數(shù)據(jù)項(xiàng)的所述分布式緩存的客戶(hù)端節(jié)點(diǎn)串行插入所述無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的更新鍵,并在其中一客戶(hù)端節(jié)點(diǎn)的更新鍵插入成功時(shí),從一數(shù)據(jù)源中獲取所述無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)以更新所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng),并記錄所述無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)刻。
[0027]較佳地,所述數(shù)據(jù)項(xiàng)的內(nèi)容包括數(shù)據(jù)鍵和所述數(shù)據(jù)鍵的鍵值,所述判斷模塊包括第一判斷模塊和第二判斷模塊;
[0028]所述第一判斷模塊用于判斷所述數(shù)據(jù)鍵的鍵值是否不存在,若是,所述數(shù)據(jù)項(xiàng)則為無(wú)效數(shù)據(jù)項(xiàng);若否,調(diào)用所述第二判斷模塊;
[0029]所述第二判斷模塊用于判斷所述數(shù)據(jù)鍵的鍵值是否達(dá)到所述過(guò)期時(shí)長(zhǎng),若是,所述數(shù)據(jù)項(xiàng)則為無(wú)效數(shù)據(jù)項(xiàng)。
[0030]較佳地,所述插入并更新模塊用于在所述第一判斷模塊的判斷結(jié)果為是時(shí)以同步請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新,在所述第二判斷模塊的判斷結(jié)果為是時(shí)以異步請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新。
[0031]較佳地,所述更新系統(tǒng)還包括第三判斷模塊,所述第三判斷模塊用于判斷所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)長(zhǎng)是否超過(guò)一時(shí)長(zhǎng)閾值,若是,調(diào)用所述插入并更新豐吳塊。
[0032]本發(fā)明還提供一種本地緩存的更新系統(tǒng),其特點(diǎn)在于,其利用如上所述的分布式緩存的更新系統(tǒng)中已更新的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。
[0033]較佳地,還包括一更新模塊,所述更新模塊用于在利用分布式緩存的更新系統(tǒng)中已更新的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)失敗時(shí),通過(guò)從所述數(shù)據(jù)源中獲取所述數(shù)據(jù)項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)的方式更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。
[0034]本發(fā)明的積極進(jìn)步效果在于:本發(fā)明通過(guò)向多個(gè)數(shù)據(jù)項(xiàng)過(guò)期的客戶(hù)端節(jié)點(diǎn)串行插入一個(gè)更新鍵,使得僅有插入更新鍵成功的客戶(hù)端節(jié)點(diǎn)才能執(zhí)行更新,由于插入更新鍵的方式是以串行的方式執(zhí)行,因此多個(gè)客戶(hù)端節(jié)點(diǎn)中僅會(huì)有一個(gè)客戶(hù)端節(jié)點(diǎn)能夠插入成功, 而其余的客戶(hù)端節(jié)點(diǎn)的數(shù)據(jù)項(xiàng)會(huì)從更新的客戶(hù)端節(jié)點(diǎn)的數(shù)據(jù)項(xiàng)中同步獲得數(shù)據(jù)的更新。因此能夠保證只有一個(gè)更新鍵插入成功的客戶(hù)端節(jié)點(diǎn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),大大降低了現(xiàn)有技術(shù)中分布式緩存對(duì)數(shù)據(jù)庫(kù)進(jìn)行大批量訪問(wèn)所造成的訪問(wèn)壓力,不會(huì)出現(xiàn)驚群效應(yīng),使得數(shù)據(jù)庫(kù)能夠保持穩(wěn)定?!靖綀D說(shuō)明】
[0035]圖1為本發(fā)明實(shí)施例1的分布式緩存的更新方法流程圖。
[0036]圖2為本發(fā)明實(shí)施例3的分布式緩存的更新系統(tǒng)的結(jié)構(gòu)示意圖?!揪唧w實(shí)施方式】
[0037]下面通過(guò)實(shí)施例的方式進(jìn)一步說(shuō)明本發(fā)明,但并不因此將本發(fā)明限制在所述的實(shí)施例范圍之中。
[0038]實(shí)施例1
[0039]本實(shí)施例提供一種分布式緩存的更新方法,如圖1所示,包括:
[0040]步驟101、建立一分布式緩存,所述分布式緩存內(nèi)存儲(chǔ)有若干數(shù)據(jù)項(xiàng)和每一數(shù)據(jù)項(xiàng)的過(guò)期時(shí)長(zhǎng),每一數(shù)據(jù)項(xiàng)分別與一更新鍵對(duì)應(yīng);
[0041]所述數(shù)據(jù)項(xiàng)的內(nèi)容可包括數(shù)據(jù)鍵和所述數(shù)據(jù)鍵的鍵值,過(guò)期時(shí)長(zhǎng)是對(duì)于每一數(shù)據(jù)項(xiàng)的存活周期,當(dāng)超過(guò)存活周期時(shí),數(shù)據(jù)項(xiàng)則為過(guò)期數(shù)據(jù),一旦過(guò)期,數(shù)據(jù)項(xiàng)內(nèi)的鍵值就會(huì)自動(dòng)被刪除,而一旦鍵值被刪除后分布式緩存就需要同步等待填充。但有些數(shù)據(jù)項(xiàng),即便過(guò)期也會(huì)由于某些原因沒(méi)有及時(shí)刪除,過(guò)期數(shù)據(jù)項(xiàng)仍然會(huì)存在,因此需對(duì)該些數(shù)據(jù)項(xiàng)進(jìn)行更新。所述更新鍵存儲(chǔ)于一第二分布式緩存中。
[0042]步驟102、根據(jù)所述數(shù)據(jù)項(xiàng)的內(nèi)容和所述過(guò)期時(shí)長(zhǎng)判斷所述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng),并在判斷結(jié)果為是時(shí)進(jìn)入步驟103;
[0043]若不存在無(wú)效數(shù)據(jù)項(xiàng),則可在外部設(shè)備請(qǐng)求數(shù)據(jù)項(xiàng)時(shí)返回該有效的數(shù)據(jù)項(xiàng),或者外部設(shè)備不請(qǐng)求數(shù)據(jù)項(xiàng)時(shí),保持該有效的數(shù)據(jù)項(xiàng)。而無(wú)效數(shù)據(jù)項(xiàng)的判斷方法為:判斷所述數(shù)據(jù)鍵的鍵值是否不存在,若是,所述數(shù)據(jù)項(xiàng)則為無(wú)效數(shù)據(jù)項(xiàng);若否,判斷所述數(shù)據(jù)鍵的鍵值是否達(dá)到所述過(guò)期時(shí)長(zhǎng),若是,所述數(shù)據(jù)項(xiàng)則為無(wú)效數(shù)據(jù)項(xiàng)。
[0044]也即,將不存在鍵值和鍵值過(guò)期的數(shù)據(jù)項(xiàng)均視為無(wú)效數(shù)據(jù)項(xiàng),此外無(wú)效數(shù)據(jù)項(xiàng)還可包括鍵值是錯(cuò)誤值的情形。步驟102在外部設(shè)備向所述分布式緩存請(qǐng)求所述數(shù)據(jù)項(xiàng)時(shí)執(zhí)行所述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng)的判斷,或者周期性地執(zhí)行所述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng)的判斷。即,步驟102的觸發(fā)條件可以是外部設(shè)備請(qǐng)求分布式緩存內(nèi)的數(shù)據(jù)項(xiàng)時(shí)執(zhí)行的對(duì)數(shù)據(jù)項(xiàng)的判斷操作,當(dāng)外部設(shè)備請(qǐng)求獲得一數(shù)據(jù)項(xiàng)時(shí),則判斷請(qǐng)求的該數(shù)據(jù)項(xiàng)是否無(wú)效;而觸發(fā)條件也可以是系統(tǒng)設(shè)定的定期自動(dòng)判斷,以定期檢查分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng)。
[0045]步驟103、向存在無(wú)效數(shù)據(jù)項(xiàng)的所述分布式緩存的客戶(hù)端節(jié)點(diǎn)串行插入所述無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的更新鍵,并在其中一客戶(hù)端節(jié)點(diǎn)的更新鍵插入成功時(shí),從一數(shù)據(jù)源中獲取所述無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)以更新所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng),并記錄所述無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)刻;
[0046]假設(shè)分布式緩存內(nèi)的鍵值對(duì)應(yīng)有5個(gè)客戶(hù)端節(jié)點(diǎn),其中有三個(gè)客戶(hù)端節(jié)點(diǎn)的數(shù)據(jù)項(xiàng)無(wú)效,但其鍵值仍然存在,三個(gè)客戶(hù)端節(jié)點(diǎn)會(huì)采用異步更新的方式請(qǐng)求從所述第二分布式緩存中插入各自對(duì)應(yīng)的更新鍵,由于三個(gè)客戶(hù)端均是串行執(zhí)行所述更新鍵的插入操作, 使得其中只有一個(gè)客戶(hù)端節(jié)點(diǎn)的更新鍵插入成功。對(duì)于更新鍵插入成功的情形可以但不限于是運(yùn)行性能較好的客戶(hù)端節(jié)點(diǎn)獲得該更新鍵,或者是處于串行隊(duì)列之首的客戶(hù)端節(jié)點(diǎn)獲得該更新鍵。可以理解,該更新鍵是否插入成功是作為數(shù)據(jù)項(xiàng)能否更新的條件。[〇〇47]數(shù)據(jù)源可為外部的數(shù)據(jù)庫(kù),或者第三方接口數(shù)據(jù)等。
[0048]針對(duì)數(shù)據(jù)鍵的鍵值不存在的情形,步驟103中以同步請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新:即只要有一個(gè)客戶(hù)端節(jié)點(diǎn)成功插入更新鍵并完成數(shù)據(jù)項(xiàng)的更新,便會(huì)在當(dāng)前線程下將更新完成的數(shù)據(jù)項(xiàng)及時(shí)返回至請(qǐng)求數(shù)據(jù)項(xiàng)的一方。可以說(shuō),采用同步請(qǐng)求的方式不會(huì)產(chǎn)生程序錯(cuò)誤,能夠保證外部設(shè)備請(qǐng)求分布式緩存內(nèi)的數(shù)據(jù)時(shí),能夠在當(dāng)前線程下獲得響應(yīng)數(shù)據(jù)。
[0049]而針對(duì)數(shù)據(jù)鍵的鍵值過(guò)期的情形,步驟103中以異步請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新。即外部設(shè)備請(qǐng)求獲得分布式緩存的數(shù)據(jù)項(xiàng)時(shí),分布式緩存可通過(guò)其它線程返回更新了的數(shù)據(jù)項(xiàng),而請(qǐng)求數(shù)據(jù)項(xiàng)的當(dāng)前線程則可執(zhí)行其它任務(wù)??梢哉f(shuō),采用異步請(qǐng)求的方式能夠提高線程的執(zhí)行效率,由于過(guò)期數(shù)據(jù)仍然存在,因此過(guò)期數(shù)據(jù)也是可以在當(dāng)前線程返回至請(qǐng)求端,以保證程序不會(huì)出錯(cuò)。
[0050]此外,步驟103中當(dāng)所述更新鍵插入失敗時(shí)以同步請(qǐng)求的方式再次獲取分布式緩存內(nèi)的數(shù)據(jù)項(xiàng),和/或,步驟103中當(dāng)所述無(wú)效數(shù)據(jù)項(xiàng)更新完成時(shí),以同步請(qǐng)求的方式返回更新了的數(shù)據(jù)項(xiàng)。
[0051]也即,針對(duì)插入更新鍵失敗的客戶(hù)端節(jié)點(diǎn),還可等待一時(shí)間段后,如10ms(毫秒), 外部設(shè)備繼續(xù)向分布式緩存請(qǐng)求數(shù)據(jù)項(xiàng),直到獲得分布式緩存返回的更新了的數(shù)據(jù)項(xiàng)為止。而對(duì)于更新完成的數(shù)據(jù)項(xiàng),則也可在外部設(shè)備請(qǐng)求后及時(shí)將更新了的數(shù)據(jù)項(xiàng)返回至外部設(shè)備,能夠保證過(guò)期數(shù)據(jù)項(xiàng)的可靠更新。
[0052]而記錄無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)刻,則能夠在無(wú)效數(shù)據(jù)項(xiàng)更新為有效數(shù)據(jù)項(xiàng)之后,通過(guò)該更新時(shí)刻與設(shè)定的數(shù)據(jù)項(xiàng)的存活周期(即所述過(guò)期時(shí)長(zhǎng)),能夠推出更新了的數(shù)據(jù)項(xiàng)下一次變?yōu)闊o(wú)效數(shù)據(jù)項(xiàng)的時(shí)間節(jié)點(diǎn)(即為更新時(shí)刻加上所述過(guò)期時(shí)長(zhǎng)后的時(shí)間節(jié)點(diǎn))。
[0053] 步驟103之后還包括:[〇〇54]步驟1041、判斷所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)長(zhǎng)是否超過(guò)一時(shí)長(zhǎng)閾值,若是,返回步驟103。
[0055]對(duì)插入更新鍵成功的客戶(hù)端節(jié)點(diǎn)的更新時(shí)長(zhǎng)進(jìn)行限制,能夠保障客戶(hù)端節(jié)點(diǎn)更新數(shù)據(jù)項(xiàng)的可靠性。對(duì)于在時(shí)長(zhǎng)閾值內(nèi)完成更新操作的情形,執(zhí)行:[〇〇56]步驟1042、其余的存在無(wú)效數(shù)據(jù)項(xiàng)的客戶(hù)端節(jié)點(diǎn)與已經(jīng)更新了的客戶(hù)端節(jié)點(diǎn)的數(shù)據(jù)項(xiàng)實(shí)現(xiàn)同步更新。
[0057]而在超過(guò)時(shí)長(zhǎng)閾值后,所述具有無(wú)效數(shù)據(jù)項(xiàng)的客戶(hù)端節(jié)點(diǎn)則會(huì)重新執(zhí)行步驟103 的操作。[〇〇58]更新鍵可以存儲(chǔ)于第二分布式緩存中,也可存儲(chǔ)于數(shù)據(jù)庫(kù)中,本實(shí)施例還可對(duì)第二分布式緩存內(nèi)的更新鍵的存活狀態(tài)進(jìn)行監(jiān)控:判斷同一客戶(hù)端節(jié)點(diǎn)的更新鍵插入失敗的次數(shù)是否達(dá)到一次數(shù)閾值,如3次,若是,將所述更新鍵存儲(chǔ)于一數(shù)據(jù)庫(kù)中。
[0059]即達(dá)到所述次數(shù)閾值時(shí)說(shuō)明第二分布式緩存出現(xiàn)故障,此時(shí)則可使用數(shù)據(jù)庫(kù)中存儲(chǔ)的所述更新鍵執(zhí)行插入操作,以保障無(wú)效數(shù)據(jù)項(xiàng)的及時(shí)更新。
[0060]可見(jiàn),本實(shí)施例通過(guò)搶占更新鍵的方式來(lái)判斷更新的執(zhí)行權(quán),只有搶占更新鍵成功的客戶(hù)端節(jié)點(diǎn),才能執(zhí)行更新操作。而由于Redis(—個(gè)key-value鍵值存儲(chǔ)系統(tǒng))自帶分布式鎖,因此本實(shí)施例的分布式緩存可用Redis實(shí)現(xiàn)。本實(shí)施例請(qǐng)求更新的數(shù)量,跟集群的機(jī)器數(shù)量多少無(wú)關(guān),原則上該時(shí)長(zhǎng)閾值內(nèi),只有一個(gè)客戶(hù)端節(jié)點(diǎn)的鍵值執(zhí)行更新,這樣就可以保證所有的客戶(hù)端節(jié)點(diǎn)都可以成為一個(gè)緩存key(鍵)的更新點(diǎn),從而充分利用資源。其具有很強(qiáng)的容錯(cuò)性能,保證一直有數(shù)據(jù)存在,且分布式緩存的性能優(yōu)異,緩存機(jī)制可靠。
[0061]本實(shí)施例通過(guò)向多個(gè)數(shù)據(jù)項(xiàng)無(wú)效的客戶(hù)端節(jié)點(diǎn)串行插入一個(gè)更新鍵,使得僅有插入更新鍵成功的客戶(hù)端節(jié)點(diǎn)才能執(zhí)行更新,由于插入更新鍵的方式是以串行的方式執(zhí)行, 因此多個(gè)客戶(hù)端節(jié)點(diǎn)中僅會(huì)有一個(gè)客戶(hù)端節(jié)點(diǎn)能夠插入成功,而其余的客戶(hù)端節(jié)點(diǎn)的鍵值會(huì)從更新的客戶(hù)端節(jié)點(diǎn)的鍵值中同步獲得數(shù)據(jù)的更新。因此能夠保證只有一個(gè)更新鍵插入成功的客戶(hù)端節(jié)點(diǎn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),大大降低了現(xiàn)有技術(shù)中分布式緩存對(duì)數(shù)據(jù)庫(kù)進(jìn)行大批量訪問(wèn)所造成的訪問(wèn)壓力,不會(huì)出現(xiàn)驚群效應(yīng),使得數(shù)據(jù)庫(kù)能夠保持穩(wěn)定。[〇〇62] 實(shí)施例2
[0063]本實(shí)施例提供一種本地緩存的更新方法,其利用如實(shí)施例1所述的分布式緩存的更新方法中已更新的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。當(dāng)利用分布式緩存的更新方法中已更新的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)失敗時(shí),通過(guò)從所述數(shù)據(jù)源中獲取所述數(shù)據(jù)項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)的方式更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。[〇〇64]本實(shí)施例的本地緩存的更新原理與分布式緩存的更新原理相同,只是本地緩存的數(shù)據(jù)項(xiàng)的更新來(lái)源于分布式緩存提供的數(shù)據(jù)項(xiàng)。也即,本地緩存內(nèi)的數(shù)據(jù)的更新可以通過(guò)從分布式緩存中獲取數(shù)據(jù)以執(zhí)行更新,當(dāng)更新失敗時(shí),再?gòu)臄?shù)據(jù)源中獲得相應(yīng)的數(shù)據(jù)進(jìn)行更新,以盡可能地減少緩存更新所造成的對(duì)數(shù)據(jù)庫(kù)的批量訪問(wèn)次數(shù)。本實(shí)施例的本地緩存的更新方法請(qǐng)求更新的數(shù)量,也跟集群的機(jī)器數(shù)量多少無(wú)關(guān)。原則上該時(shí)長(zhǎng)閾值內(nèi),只有一臺(tái)機(jī)器執(zhí)行更新,這樣就可以保證所有的機(jī)器都可以成為一個(gè)緩存Key的更新點(diǎn),從而充分利用資源,又節(jié)約資源。且保證所有機(jī)器的同一個(gè)緩存Key,數(shù)據(jù)源唯一,即同一個(gè)分布式緩存上的數(shù)據(jù),保證數(shù)據(jù)一致性。且本地緩存的更新不再依賴(lài)于DB(database,數(shù)據(jù)庫(kù)),而是直接從分布式緩存獲取,提高了更新性能。且可以把DB更新作為備選方案,防止分布式緩存 Down (停機(jī))機(jī)后數(shù)據(jù)持續(xù)更新。
[0065]本實(shí)施例利用分布式緩存更新的可靠性和響應(yīng)時(shí)間短的特性,有效減少了對(duì)DB的請(qǐng)求次數(shù),保證了 DB的穩(wěn)定性,對(duì)于集群規(guī)模的擴(kuò)大,也只是增加了對(duì)更新鍵的訪問(wèn)量,利用本地?cái)?shù)據(jù)項(xiàng)的過(guò)期檢測(cè)和分布式緩存更新方法的數(shù)據(jù)新鮮度,基本保證所有集群的本地緩存的數(shù)據(jù)一致性,對(duì)于更新失敗的情況下,有效利用一定時(shí)期的過(guò)期緩存,保證數(shù)據(jù)的輸出。
[0066]實(shí)施例3[0〇67]本實(shí)施例提供一種分布式緩存的更新系統(tǒng)100,如圖2所不,包括一建立模塊1、一判斷模塊2和一插入并更新模塊3;
[0068]所述建立模塊1用于建立一分布式緩存,所述分布式緩存內(nèi)存儲(chǔ)有若干數(shù)據(jù)項(xiàng)和每一數(shù)據(jù)項(xiàng)的過(guò)期時(shí)長(zhǎng),每一數(shù)據(jù)項(xiàng)分別與一更新鍵對(duì)應(yīng);
[0069]所述判斷模塊2用于根據(jù)所述數(shù)據(jù)項(xiàng)的內(nèi)容和所述過(guò)期時(shí)長(zhǎng)判斷所述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng),并在判斷結(jié)果為是時(shí)調(diào)用所述插入并更新模塊;
[0070]所述插入并更新模塊3用于向存在無(wú)效數(shù)據(jù)項(xiàng)的所述分布式緩存的客戶(hù)端節(jié)點(diǎn)串行插入所述無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的更新鍵,并在其中一客戶(hù)端節(jié)點(diǎn)的更新鍵插入成功時(shí),從一數(shù)據(jù)源中獲取所述無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)以更新所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng),并記錄所述無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)刻。
[0071]所述數(shù)據(jù)項(xiàng)的內(nèi)容包括數(shù)據(jù)鍵和所述數(shù)據(jù)鍵的鍵值,所述判斷模塊1包括第一判斷模塊21和第二判斷模塊22;
[0072]所述第一判斷模塊21用于判斷所述數(shù)據(jù)鍵的鍵值是否不存在,若是,所述數(shù)據(jù)項(xiàng)則為無(wú)效數(shù)據(jù)項(xiàng);若否,調(diào)用所述第二判斷模塊;
[0073]所述第二判斷模塊22用于判斷所述數(shù)據(jù)鍵的鍵值是否達(dá)到所述過(guò)期時(shí)長(zhǎng),若是, 所述數(shù)據(jù)項(xiàng)則為無(wú)效數(shù)據(jù)項(xiàng)。
[0074]所述插入并更新模塊3用于在所述第一判斷模塊的判斷結(jié)果為是時(shí)以同步請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新,在所述第二判斷模塊的判斷結(jié)果為是時(shí)以異步請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新。[〇〇75]所述更新系統(tǒng)還包括第三判斷模塊4,所述第三判斷模塊4用于判斷所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)長(zhǎng)是否超過(guò)一時(shí)長(zhǎng)閾值,若是,調(diào)用所述插入并更新模塊 3〇
[0076]本實(shí)施例可以采用實(shí)施例1所述的更新方法工作,其具有與實(shí)施例1相同的技術(shù)效果。
[0077]實(shí)施例4
[0078]本實(shí)施例提供一種本地緩存的更新系統(tǒng),其利用如實(shí)施例3所述的分布式緩存的更新系統(tǒng)中已更新的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。所述更新系統(tǒng)還包括一更新模塊,所述更新模塊用于在利用分布式緩存的更新系統(tǒng)中已更新的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)失敗時(shí),通過(guò)從所述數(shù)據(jù)源中獲取所述數(shù)據(jù)項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)的方式更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。
[0079]本實(shí)施例可以采用實(shí)施例2所述的更新方法工作,其具有與實(shí)施例2相同的技術(shù)效果。
[0080]雖然以上描述了本發(fā)明的【具體實(shí)施方式】,但是本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,這些僅是舉例說(shuō)明,本發(fā)明的保護(hù)范圍是由所附權(quán)利要求書(shū)限定的。本領(lǐng)域的技術(shù)人員在不背離本發(fā)明的原理和實(shí)質(zhì)的前提下,可以對(duì)這些實(shí)施方式做出多種變更或修改,但這些變更和修改均落入本發(fā)明的保護(hù)范圍。
【主權(quán)項(xiàng)】
1.一種分布式緩存的更新方法,其特征在于,包括:S1、建立一分布式緩存,所述分布式緩存內(nèi)存儲(chǔ)有若干數(shù)據(jù)項(xiàng)和每一數(shù)據(jù)項(xiàng)的過(guò)期時(shí) 長(zhǎng),每一數(shù)據(jù)項(xiàng)分別與一更新鍵對(duì)應(yīng);&、根據(jù)所述數(shù)據(jù)項(xiàng)的內(nèi)容和所述過(guò)期時(shí)長(zhǎng)判斷所述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù) 項(xiàng),并在判斷結(jié)果為是時(shí)進(jìn)入步驟&,&、向存在無(wú)效數(shù)據(jù)項(xiàng)的所述分布式緩存的客戶(hù)端節(jié)點(diǎn)串行插入所述無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng) 的更新鍵,并在其中一客戶(hù)端節(jié)點(diǎn)的更新鍵插入成功時(shí),從一數(shù)據(jù)源中獲取所述無(wú)效數(shù)據(jù) 項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)以更新所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng),并記錄所述無(wú)效數(shù)據(jù)項(xiàng) 的更新時(shí)刻。2.如權(quán)利要求1所述的更新方法,其特征在于,所述數(shù)據(jù)項(xiàng)的內(nèi)容包括數(shù)據(jù)鍵和所述數(shù) 據(jù)鍵的鍵值,步驟S2中根據(jù)所述數(shù)據(jù)項(xiàng)的內(nèi)容和所述過(guò)期時(shí)長(zhǎng)判斷所述分布式緩存內(nèi)是否 存在無(wú)效數(shù)據(jù)項(xiàng)包括:S21、判斷所述數(shù)據(jù)鍵的鍵值是否不存在,若是,所述數(shù)據(jù)項(xiàng)則為無(wú)效數(shù)據(jù)項(xiàng);若否,執(zhí)行 步驟S22;s22、判斷所述數(shù)據(jù)鍵的鍵值是否達(dá)到所述過(guò)期時(shí)長(zhǎng),若是,所述數(shù)據(jù)項(xiàng)則為無(wú)效數(shù)據(jù)項(xiàng)。3.如權(quán)利要求2所述的更新方法,其特征在于,步驟S21在判斷結(jié)果為是時(shí),步驟S3中以 同步請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新;步驟S22在判斷結(jié)果為是時(shí),步驟&中以異步 請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新。4.如權(quán)利要求1所述的更新方法,其特征在于,所述更新鍵存儲(chǔ)于一第二分布式緩存 中,所述更新方法包括:541、判斷同一客戶(hù)端節(jié)點(diǎn)的更新鍵插入失敗的次數(shù)是否達(dá)到一次數(shù)閾值,若是,將所述 更新鍵存儲(chǔ)于一數(shù)據(jù)庫(kù)中。5.如權(quán)利要求1所述的更新方法,其特征在于,步驟S2在外部設(shè)備向所述分布式緩存請(qǐng) 求所述數(shù)據(jù)項(xiàng)時(shí)執(zhí)行所述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng)的判斷,或者周期性地執(zhí)行所 述分布式緩存內(nèi)是否存在無(wú)效數(shù)據(jù)項(xiàng)的判斷。6.如權(quán)利要求1所述的更新方法,其特征在于,步驟&之后還包括:542、判斷所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)長(zhǎng)是否超過(guò)一時(shí)長(zhǎng)閾值,若是, 返回步驟S3。7.如權(quán)利要求1-6中任意一項(xiàng)所述的更新方法,其特征在于,步驟&中當(dāng)所述更新鍵插 入失敗時(shí)以同步請(qǐng)求的方式再次獲取分布式緩存內(nèi)的數(shù)據(jù)項(xiàng),和/或,步驟&中當(dāng)所述無(wú)效 數(shù)據(jù)項(xiàng)更新完成時(shí),以同步請(qǐng)求的方式返回更新了的數(shù)據(jù)項(xiàng)。8.—種本地緩存的更新方法,其特征在于,其利用如權(quán)利要求1-7中任意一項(xiàng)所述的分 布式緩存的更新方法中已更新的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。9.如權(quán)利要求8所述的更新方法,其特征在于,當(dāng)利用分布式緩存的更新方法中已更新 的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)失敗時(shí),通過(guò)從所述數(shù)據(jù)源中獲取所述數(shù)據(jù)項(xiàng)對(duì)應(yīng) 的最新數(shù)據(jù)項(xiàng)的方式更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。10.—種分布式緩存的更新系統(tǒng),其特征在于,包括一建立模塊、一判斷模塊和一插入 并更新模塊;所述建立模塊用于建立一分布式緩存,所述分布式緩存內(nèi)存儲(chǔ)有若干數(shù)據(jù)項(xiàng)和每一數(shù) 據(jù)項(xiàng)的過(guò)期時(shí)長(zhǎng),每一數(shù)據(jù)項(xiàng)分別與一更新鍵對(duì)應(yīng);所述判斷模塊用于根據(jù)所述數(shù)據(jù)項(xiàng)的內(nèi)容和所述過(guò)期時(shí)長(zhǎng)判斷所述分布式緩存內(nèi)是 否存在無(wú)效數(shù)據(jù)項(xiàng),并在判斷結(jié)果為是時(shí)調(diào)用所述插入并更新模塊;所述插入并更新模塊用于向存在無(wú)效數(shù)據(jù)項(xiàng)的所述分布式緩存的客戶(hù)端節(jié)點(diǎn)串行插 入所述無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的更新鍵,并在其中一客戶(hù)端節(jié)點(diǎn)的更新鍵插入成功時(shí),從一數(shù)據(jù) 源中獲取所述無(wú)效數(shù)據(jù)項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)以更新所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng), 并記錄所述無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)刻。11.如權(quán)利要求10所述的更新系統(tǒng),其特征在于,所述數(shù)據(jù)項(xiàng)的內(nèi)容包括數(shù)據(jù)鍵和所述 數(shù)據(jù)鍵的鍵值,所述判斷模塊包括第一判斷模塊和第二判斷模塊;所述第一判斷模塊用于判斷所述數(shù)據(jù)鍵的鍵值是否不存在,若是,所述數(shù)據(jù)項(xiàng)則為無(wú) 效數(shù)據(jù)項(xiàng);若否,調(diào)用所述第二判斷模塊;所述第二判斷模塊用于判斷所述數(shù)據(jù)鍵的鍵值是否達(dá)到所述過(guò)期時(shí)長(zhǎng),若是,所述數(shù) 據(jù)項(xiàng)則為無(wú)效數(shù)據(jù)項(xiàng)。12.如權(quán)利要求11所述的更新系統(tǒng),其特征在于,所述插入并更新模塊用于在所述第一 判斷模塊的判斷結(jié)果為是時(shí)以同步請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新,在所述第二判 斷模塊的判斷結(jié)果為是時(shí)以異步請(qǐng)求的方式執(zhí)行所述無(wú)效數(shù)據(jù)項(xiàng)的更新。13.如權(quán)利要求10所述的更新系統(tǒng),其特征在于,所述更新系統(tǒng)還包括第三判斷模塊, 所述第三判斷模塊用于判斷所述分布式緩存中的所述無(wú)效數(shù)據(jù)項(xiàng)的更新時(shí)長(zhǎng)是否超過(guò)一 時(shí)長(zhǎng)閾值,若是,調(diào)用所述插入并更新模塊。14.一種本地緩存的更新系統(tǒng),其特征在于,其利用如權(quán)利要求10-13中任意一項(xiàng)所述 的分布式緩存的更新系統(tǒng)中已更新的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。15.如權(quán)利要求14所述的更新系統(tǒng),其特征在于,還包括一更新模塊,所述更新模塊用 于在利用分布式緩存的更新系統(tǒng)中已更新的數(shù)據(jù)項(xiàng)更新本地緩存內(nèi)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)失敗時(shí), 通過(guò)從所述數(shù)據(jù)源中獲取所述數(shù)據(jù)項(xiàng)對(duì)應(yīng)的最新數(shù)據(jù)項(xiàng)的方式更新本地緩存內(nèi)對(duì)應(yīng)的數(shù) 據(jù)項(xiàng)。
【文檔編號(hào)】G06F17/30GK106021468SQ201610328064
【公開(kāi)日】2016年10月12日
【申請(qǐng)日】2016年5月17日
【發(fā)明人】陸昆朋
【申請(qǐng)人】上海攜程商務(wù)有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1