與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的方法、裝置和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體涉及一種與RediS服務(wù)器進(jìn)行數(shù)據(jù)同步的方法、裝置和系統(tǒng)。
【背景技術(shù)】
[0002]Redis存儲方式能夠靈活支持多種數(shù)據(jù)類型,因此,越來越多的在線業(yè)務(wù)開始采用Redis存儲方式進(jìn)行存儲。但是,由于Redis存儲方式需要占用大量的內(nèi)存,導(dǎo)致可存儲的空間非常有限,由此,迫切地需要將一些不常用的、重要性不高的業(yè)務(wù)迀移到其他的存儲設(shè)備中,以便節(jié)省內(nèi)存,提高機(jī)器利用效率。
[0003]由于Redis服務(wù)器中的數(shù)據(jù)量非常龐大,且Redis服務(wù)器上的業(yè)務(wù)數(shù)據(jù)經(jīng)常更新,因此,在將Redis服務(wù)器中的業(yè)務(wù)數(shù)據(jù)迀移到其他存儲設(shè)備的過程中,經(jīng)常會出現(xiàn)Redis服務(wù)器上的原始數(shù)據(jù)還未復(fù)制完,就又接收到了新的更新數(shù)據(jù),導(dǎo)致其他存儲設(shè)備很難做到與Redis服務(wù)器之間的數(shù)據(jù)同步,由此無法實(shí)現(xiàn)業(yè)務(wù)的無縫迀移。
【發(fā)明內(nèi)容】
[0004]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的方法、裝置和系統(tǒng)。
[0005]根據(jù)本發(fā)明的一個方面,提供了一種與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的方法,其包括:接收Redis服務(wù)器發(fā)送的全量數(shù)據(jù);對全量數(shù)據(jù)進(jìn)行解析及存儲,并通過日志文件記錄來自Redis服務(wù)器的增量數(shù)據(jù),直至完成與Redis服務(wù)器之間的數(shù)據(jù)同步;其中,當(dāng)全量數(shù)據(jù)解析并存儲完畢后,開始解析并存儲日志文件中記錄的增量數(shù)據(jù)。
[0006]根據(jù)本發(fā)明的另一方面,提供了一種與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的裝置,其包括:接收模塊,適于接收Redis服務(wù)器發(fā)送的全量數(shù)據(jù)以及增量數(shù)據(jù);第一存儲模塊,適于對接收模塊接收到的全量數(shù)據(jù)進(jìn)行解析及存儲;日志模塊,適于通過日志文件記錄接收模塊接收到的來自Redis服務(wù)器的增量數(shù)據(jù),直至完成與Redis服務(wù)器之間的數(shù)據(jù)同步;第二存儲模塊,適于在第一存儲模塊對全量數(shù)據(jù)解析并存儲完畢后,開始解析并存儲日志模塊中記錄的增量數(shù)據(jù)。
[0007]根據(jù)本發(fā)明的另一方面,提供了一種與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的系統(tǒng),其包括:Redis服務(wù)器以及上述的與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的裝置。
[0008]本發(fā)明提供的與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的方法、裝置和系統(tǒng),能夠在對Redis服務(wù)器發(fā)送的全量數(shù)據(jù)進(jìn)行解析及存儲的過程中,通過日志文件記錄來自Redis服務(wù)器的增量數(shù)據(jù),直至完成與Redis服務(wù)器之間的數(shù)據(jù)同步。其中,增量數(shù)據(jù)是指在生成上述全量數(shù)據(jù)之后進(jìn)一步增加的數(shù)據(jù),其包括在上述全量數(shù)據(jù)基礎(chǔ)上的新增數(shù)據(jù)和/或修改數(shù)據(jù)。上述日志文件的主要作用在于:能夠記錄全量數(shù)據(jù)解析過程中收到的增量數(shù)據(jù),使解析全量數(shù)據(jù)的過程與接收增量數(shù)據(jù)的過程能夠同時(shí)進(jìn)行。
[0009]由此可見,采用本發(fā)明中的方法、裝置和系統(tǒng),即使在全量數(shù)據(jù)非常龐大、解析耗時(shí)很長的情況下也不會耽誤增量數(shù)據(jù)的接收,由此能夠確保數(shù)據(jù)同步的效率。而且,由于Redis服務(wù)器中用于緩存最新數(shù)據(jù)的環(huán)形緩沖區(qū)被寫滿之后,會將原來的數(shù)據(jù)覆蓋掉,因此,如果不能及時(shí)接收到來自Redis服務(wù)器的增量數(shù)據(jù),則可能會發(fā)生數(shù)據(jù)丟失的情況,而本發(fā)明中的日志文件能夠及時(shí)、全面地記錄來自Redis服務(wù)器的全部增量數(shù)據(jù),因此,確保了數(shù)據(jù)同步的可靠性。通過本發(fā)明中的方法、裝置和系統(tǒng)能夠?qū)崿F(xiàn)業(yè)務(wù)的無縫迀移。
[0010]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】。
【附圖說明】
[0011]通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0012]圖1示出了根據(jù)本發(fā)明一個實(shí)施例的與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的方法流程圖;
[0013]圖2示出了本發(fā)明一個具體實(shí)施例提供的與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的方法流程圖;
[0014]圖3按照時(shí)間節(jié)點(diǎn)方式描述了圖2的步驟S210至步驟S240的實(shí)現(xiàn)過程;
[0015]圖4示出了根據(jù)本發(fā)明一個實(shí)施例的與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的裝置的結(jié)構(gòu)框圖;
[0016]圖5示出了根據(jù)本發(fā)明一個實(shí)施例的與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的系統(tǒng)結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0017]下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0018]圖1示出了根據(jù)本發(fā)明一個實(shí)施例的與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的方法流程圖,如圖1所示,該方法包括如下步驟:
[0019]步驟SllO:接收Redis服務(wù)器發(fā)送的全量數(shù)據(jù)。
[0020]其中,上述全量數(shù)據(jù)為Redis服務(wù)器根據(jù)接收到的同步請求生成的數(shù)據(jù)快照文件,在解析并存儲上述數(shù)據(jù)快照文件的過程中,通過多線程并行運(yùn)行的方式進(jìn)行解析,并對解析結(jié)果為指定類型的數(shù)據(jù)通過批量寫入的方式進(jìn)行存儲,其中,指定類型的數(shù)據(jù)包括:hash,set, list,和/或zset類型的數(shù)據(jù)。
[0021]步驟S120:對上述全量數(shù)據(jù)進(jìn)行解析及存儲,并通過日志文件記錄來自Redis服務(wù)器的增量數(shù)據(jù),直至完成與該Redis服務(wù)器之間的數(shù)據(jù)同步。其中,當(dāng)上述全量數(shù)據(jù)解析并存儲完畢后,開始解析并存儲上述日志文件中記錄的增量數(shù)據(jù)。
[0022]上述日志文件為自定義格式的文件,其通過不同的日志項(xiàng)分別記錄各條增量數(shù)據(jù),每個日志項(xiàng)中包含該條增量數(shù)據(jù)及其對應(yīng)的同步位移,以及用于對該日志項(xiàng)進(jìn)行數(shù)據(jù)校驗(yàn)的校驗(yàn)碼。其中,增量數(shù)據(jù)對應(yīng)的同步位移用于指示本條增量數(shù)據(jù)與Redis服務(wù)器中用于緩存最新更新數(shù)據(jù)的環(huán)形緩沖區(qū)之間的同步關(guān)系,能夠用來計(jì)算同步速度,并判斷是否已完成同步;校驗(yàn)碼用于確定日志項(xiàng)中存儲的數(shù)據(jù)是否正確,以便提高數(shù)據(jù)存儲的可靠性。
[0023]具體地,在步驟S120中,可通過以下方式確定是否完成與Redis服務(wù)器之間的數(shù)據(jù)同步:在解析并存儲日志文件中記錄的增量數(shù)據(jù)的過程中,如果進(jìn)一步接收到來自Redis服務(wù)器的增量數(shù)據(jù),則計(jì)算來自Redis服務(wù)器的增量數(shù)據(jù)中包含的同步位移與日志文件中已解析的增量數(shù)據(jù)中包含的同步位移之間的位移差,當(dāng)該位移差小于預(yù)設(shè)閾值時(shí),確定已完成與Redis服務(wù)器之間的數(shù)據(jù)同步。
[0024]可選地,為了實(shí)現(xiàn)實(shí)時(shí)同步,并提高存儲效率,當(dāng)確定已完成與Redis服務(wù)器之間的數(shù)據(jù)同步后,如果進(jìn)一步接收到來自該Redis服務(wù)器的增量數(shù)據(jù),則直接存儲該增量數(shù)據(jù)。
[0025]本發(fā)明提供的與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的方法,能夠在對Redis服務(wù)器發(fā)送的全量數(shù)據(jù)進(jìn)行解析及存儲的過程中,通過日志文件記錄來自Redis服務(wù)器的增量數(shù)據(jù),直至完成與Redis服務(wù)器之間的數(shù)據(jù)同步。采用該方法,即使在全量數(shù)據(jù)非常龐大、解析耗時(shí)很長的情況下也不會耽誤增量數(shù)據(jù)的接收,由此能夠確保數(shù)據(jù)同步的效率。而且,由于Redis服務(wù)器中用于緩存最新數(shù)據(jù)的環(huán)形緩沖區(qū)被寫滿之后,會將原來的數(shù)據(jù)覆蓋掉,因此,如果不能及時(shí)接收到來自Redis服務(wù)器的增量數(shù)據(jù),則可能會發(fā)生數(shù)據(jù)丟失的情況,而本發(fā)明中的日志文件能夠及時(shí)、全面地記錄來自Redis服務(wù)器的全部增量數(shù)據(jù),因此,確保了數(shù)據(jù)同步的可靠性。
[0026]下面以一個具體實(shí)施例詳細(xì)描述本發(fā)明提供的與Redis服務(wù)器進(jìn)行數(shù)據(jù)同步的方法。在該具體實(shí)施例中,以將Redis服務(wù)器中的業(yè)務(wù)數(shù)據(jù)無縫迀移至SSDB服務(wù)器為例進(jìn)行說明,本領(lǐng)域技術(shù)人員還可以依照本實(shí)施例提供的方法實(shí)現(xiàn)Redis主服務(wù)器與Redis從服務(wù)器之間的業(yè)務(wù)數(shù)據(jù)的無縫迀移,以及Redis從服務(wù)器與Redis從服