最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

實(shí)現(xiàn)在線?+?離線模式進(jìn)行遷移?Redis?數(shù)據(jù)實(shí)戰(zhàn)指南

 更新時(shí)間:2023年01月24日 10:19:07   作者:洛神灬殤  
這篇文章主要介紹了實(shí)現(xiàn)在線?+?離線模式進(jìn)行遷移?Redis?數(shù)據(jù)實(shí)戰(zhàn)指南的相關(guān)資料,需要的朋友可以參考下

redis-full-check的使用背景

在經(jīng)歷了之前的文章內(nèi)容章節(jié)內(nèi)容,已完成Redis遷移后,可能會(huì)存在以下問(wèn)題需要進(jìn)行數(shù)據(jù)遷移之后的對(duì)比。例如,如果Redis遷移的過(guò)程出現(xiàn)異常,源端與目的端Redis的數(shù)據(jù)將會(huì)不一致。

在Redis遷移完成后進(jìn)行數(shù)據(jù)校驗(yàn)可以檢查數(shù)據(jù)的一致性,該如何校驗(yàn)就是我們本文的內(nèi)容。我們?cè)谶@里采用的是阿里開(kāi)源的數(shù)據(jù)對(duì)比工具與Redis-Shake形成伴侶模式的開(kāi)源工具redis-full-check,使用redis-full-check進(jìn)行校驗(yàn)?zāi)軌蛘页霎惓?shù)據(jù),為數(shù)據(jù)對(duì)齊提供可靠依據(jù),本文主要介紹如何使用RedisFullCheck。

【Redis 技術(shù)探索】「數(shù)據(jù)遷移實(shí)戰(zhàn)」手把手教你如何實(shí)現(xiàn)在線 + 離線模式進(jìn)行遷移 Redis 數(shù)據(jù)實(shí)戰(zhàn)指南(數(shù)據(jù)檢查對(duì)比)_Redis

redis-full-check的基本介紹

redis-full-check是阿里云自研的Redis數(shù)據(jù)校驗(yàn)工具,能夠提取源端和目的端的數(shù)據(jù)進(jìn)行多輪差異化比較,并將比較結(jié)果記錄在一個(gè)SQLite3數(shù)據(jù)庫(kù)中,從而達(dá)到全量數(shù)據(jù)校驗(yàn)的目的。

遷移源端和目的端Redis實(shí)例需為主從版、單節(jié)點(diǎn)版、開(kāi)源集群版以及部分云上帶proxy的集群版(阿里云、騰訊云)。

開(kāi)源地址redis-full-check源碼地址: ??https://github.com/aliyun/redis-full-check??

【Redis 技術(shù)探索】「數(shù)據(jù)遷移實(shí)戰(zhàn)」手把手教你如何實(shí)現(xiàn)在線 + 離線模式進(jìn)行遷移 Redis 數(shù)據(jù)實(shí)戰(zhàn)指南(數(shù)據(jù)檢查對(duì)比)_redis_02

redis-full-check下載地址: ??https://github.com/alibaba/RedisFullCheck/releases??

【Redis 技術(shù)探索】「數(shù)據(jù)遷移實(shí)戰(zhàn)」手把手教你如何實(shí)現(xiàn)在線 + 離線模式進(jìn)行遷移 Redis 數(shù)據(jù)實(shí)戰(zhàn)指南(數(shù)據(jù)檢查對(duì)比)_Redis_03

編譯源碼

運(yùn)行 ./bin/redis-full-check.darwin64 or redis-full-check.linux64,它分別在OSX和Linux中構(gòu)建,然而,二進(jìn)制文件并不總是最新版本。 或者您可以根據(jù)以下步驟構(gòu)建red- full-check自己:

git clone https://github.com/alibaba/RedisFullCheck.git
cd RedisFullCheck/src/vendor
GOPATH=`pwd`/../..; govendor sync

注意:必須先安裝govendor,然后拉出所有依賴

cd ../../ && ./build.sh

執(zhí)行build.sh進(jìn)行編譯即可。

基本原理redis-full-check通過(guò)全量對(duì)比源端和目的端的redis中的數(shù)據(jù)的方式來(lái)進(jìn)行數(shù)據(jù)校驗(yàn),其比較方式通過(guò)多輪次比較:每次都會(huì)抓取源和目的端的數(shù)據(jù)進(jìn)行差異化比較,記錄不一致的數(shù)據(jù)進(jìn)入下輪對(duì)比(記錄在sqlite3 db中)。通過(guò)多倫比較不斷收斂,減少因數(shù)據(jù)增量同步導(dǎo)致的源庫(kù)和目的庫(kù)的數(shù)據(jù)不一致。最后sqlite中存在的數(shù)據(jù)就是最終的差異結(jié)果。數(shù)據(jù)對(duì)比介紹

redis-full-check對(duì)比的方向是單向,如果希望對(duì)比雙向,則需要對(duì)比2次,第一次以A為源庫(kù),B為目的庫(kù),第二次以B為源庫(kù),A為目的庫(kù)。

首次對(duì)別:會(huì)抓取源庫(kù)A的數(shù)據(jù),然后檢測(cè)是否位于B中,反向不會(huì)檢測(cè),它檢測(cè)的是源庫(kù)是否是目的庫(kù)的子集。每次比較,會(huì)先抓取比較的key。

第一輪是從源庫(kù)中進(jìn)行抓取,后面輪次是從sqlite3 db中進(jìn)行抓?。蛔トey之后是分別抓取key對(duì)應(yīng)的field和value進(jìn)行對(duì)比,然后將存在差異的部分存入sqlite3 db中,用于下次比較。

數(shù)據(jù)對(duì)比核心流程

下圖是基本的數(shù)據(jù)流圖。

對(duì)比模式(comparemode)有三種可選:

KeyOutline:只對(duì)比key值是否相等。ValueOutline:只對(duì)比value值的長(zhǎng)度是否相等。FullValue:對(duì)比key值、value長(zhǎng)度、value值是否相等。

對(duì)比會(huì)進(jìn)行comparetimes輪(默認(rèn)comparetimes=3)比較:

第一輪,首先找出在源庫(kù)上所有的key,然后分別從源庫(kù)和目的庫(kù)抓取進(jìn)行比較。第二輪,開(kāi)始迭代比較,只比較上一輪結(jié)束后仍然不一致的key和field。不一致場(chǎng)景下分析

對(duì)于key不一致的情況,包括lack_source ,lack_target 和type,從源庫(kù)和目的庫(kù)重新取key、value進(jìn)行比較。

value不一致的string,重新比較key:從源和目的取key、value比較。value不一致的hash、set和zset,只重新比較不一致的field,之前已經(jīng)比較且相同的filed不再比較。這是為了防止對(duì)于大key情況下,如果更新頻繁,將會(huì)導(dǎo)致校驗(yàn)永遠(yuǎn)不通過(guò)的情況。value不一致的list,重新比較key:從源和目的取key、value比較。

每輪之間會(huì)停止一定的時(shí)間(Interval)。

對(duì)于hash,set,zset,list大key處理采用以下方式:len <= 5192,直接取全量field、value進(jìn)行比較,使用如下命令:hgetall,smembers,zrange 0 -1 withscores,lrange 0 -1。len > 5192,使用hscan,sscan,zscan,lrange分批取field和value。使用redis-full-check解壓redis-full-check.tar.gz:tar -xvf redis-full-check.tar.gz執(zhí)行如下命令進(jìn)行數(shù)據(jù)校驗(yàn):?jiǎn)螜C(jī)實(shí)例之間進(jìn)行數(shù)據(jù)對(duì)比檢測(cè)

./redis-full-check -s $(source_redis_ip_port) -p $(source_password) -t $(target_redis_ip_port) -a $(target_password)

集群實(shí)例之間進(jìn)行數(shù)據(jù)對(duì)比檢測(cè)

./redis-full-check -s "<Redis集群地址1連接地址:Redis集群地址1端口號(hào);Redis集群地址2連接地址:Redis集群地址2端口號(hào);Redis集群地址3連接地址:Redis集群地址3端口號(hào)>" -p <Redis集群密碼> -t <Redis連接地址:Redis端口號(hào)> -a <Redis密碼> --comparemode=1 --comparetimes=1 --qps=10 --batchcount=100 --sourcedbtype=1 --targetdbfilterlist=0

參數(shù)信息介紹

redis-full-check中主要參數(shù)如下:

-s, --source=SOURCE               源redis庫(kù)地址(ip:port),如果是集群版,那么需要以分號(hào)(;)分割不同的db,只需要配置主或者從的其中之一。例如:10.1.1.1:1000;10.2.2.2:2000;10.3.3.3:3000。
  -p, --sourcepassword=Password     源redis庫(kù)密碼
      --sourceauthtype=AUTH-TYPE    源庫(kù)管理權(quán)限,開(kāi)源reids下此參數(shù)無(wú)用。
      --sourcedbtype=               源庫(kù)的類別,0:db(standalone單節(jié)點(diǎn)、主從),1: cluster(集群版),2: 阿里云
      --sourcedbfilterlist=         源庫(kù)需要抓取的邏輯db白名單,以分號(hào)(;)分割,例如:0;5;15表示db0,db5和db15都會(huì)被抓取
  -t, --target=TARGET               目的redis庫(kù)地址(ip:port)
  -a, --targetpassword=Password     目的redis庫(kù)密碼
      --targetauthtype=AUTH-TYPE    目的庫(kù)管理權(quán)限,開(kāi)源reids下此參數(shù)無(wú)用。
      --targetdbtype=               參考sourcedbtype
      --targetdbfilterlist=         參考sourcedbfilterlist
  -d, --db=Sqlite3-DB-FILE          對(duì)于差異的key存儲(chǔ)的sqlite3 db的位置,默認(rèn)result.db
      --comparetimes=COUNT          比較輪數(shù)
  -m, --comparemode=                比較模式,1表示全量比較,2表示只對(duì)比value的長(zhǎng)度,3只對(duì)比key是否存在,4全量比較的情況下,忽略大key的比較
      --id=                         用于打metric
      --jobid=                      用于打metric
      --taskid=                     用于打metric
  -q, --qps=                        qps限速閾值
      --interval=Second             每輪之間的時(shí)間間隔
      --batchcount=COUNT            批量聚合的數(shù)量
      --parallel=COUNT              比較的并發(fā)協(xié)程數(shù),默認(rèn)5
      --log=FILE                    log文件
      --result=FILE                 不一致結(jié)果記錄到result文件中,格式:'db    diff-type    key    field'
      --metric=FILE                 metric文件
      --bigkeythreshold=COUNT       大key拆分的閾值,用于comparemode=4
  -f, --filterlist=FILTER           需要比較的key列表,以豎線(|)分割。例如:"abc*|efg|m*"表示對(duì)比'abc', 'abc1', 'efg', 'm', 'mxyz',不對(duì)比'efgh', 'p'。
  -v, --version

對(duì)比實(shí)現(xiàn)案例對(duì)比2個(gè)主從版/單節(jié)點(diǎn):

./redis-full-check -t 10.101.72.137:30661 -s 10.101.72.137:30551

對(duì)比主從和集群:

./redis-full-check -s "100.81.164.177:21331;100.81.164.177:21332;100.81.164.177:21333" -t 10.101.72.137:30551 --comparemode=1 --comparetimes=1 --qps=10 --batchcount=100 --sourcedbtype=1 --targetdbfilterlist=0

由于集群版只有db0,所以如果一端是集群版,另一端是非集群版(多個(gè)邏輯db),則需要添加sourcedbfilterlist或者targetdbfilterlist(非集群版本的一端)

查詢對(duì)比結(jié)果

sqlite> select * from key;
id          key              type        conflict_type  db          source_len  target_len
----------  ---------------  ----------  -------------  ----------  ----------  ----------
1           keydiff1_string  string      value          1           6           6
2           keydiff_hash     hash        value          0           2           1
3           keydiff_string   string      value          0           6           6
4           key_string_diff  string      value          0           6           6
5           keylack_string   string      lack_target    0           6           0
sqlite>

sqlite> select * from field;
id          field       conflict_type  key_id
----------  ----------  -------------  ----------
1           k1          lack_source    2
2           k2          value          2
3           k3          lack_target    2

對(duì)比結(jié)果差異分析不一致類型

redis-full-check判斷不一致的方式主要分為2類:key不一致和value不一致。

key不一致

key不一致主要分為以下幾種情況:

lack_target : key存在于源庫(kù),但不存在于目的庫(kù)。type: key存在于源庫(kù)和目的庫(kù),但是類型不一致。value: key存在于源庫(kù)和目的庫(kù),且類型一致,但是value不一致。value不一致不同數(shù)據(jù)類型有不同的對(duì)比標(biāo)準(zhǔn):string: value不同。hash: 存在field,滿足下面3個(gè)條件之一: field存在于源端,但不存在與目的端。field存在于目的端,但不存在與源端。field同時(shí)存在于源和目的端,但是value不同。set/zset:與hash類似。list: 與hash類似。

field沖突類型有以下幾種情況(只存在于hash,set,zset,list類型key中)

lack_source: field存在于源端key,field不存在與目的端key。lack_target: field不存在與源端key,field存在于目的端key。value: field存在于源端key和目的端key,但是field對(duì)應(yīng)的value不同。

參考資料

數(shù)據(jù)參數(shù)校驗(yàn)

redis-full-check中文文檔

到此這篇關(guān)于實(shí)現(xiàn)在線 + 離線模式進(jìn)行遷移 Redis 數(shù)據(jù)實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)遷移 Redis 數(shù)據(jù)實(shí)戰(zhàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 從MySQL到Redis的簡(jiǎn)單數(shù)據(jù)庫(kù)遷移方法

    從MySQL到Redis的簡(jiǎn)單數(shù)據(jù)庫(kù)遷移方法

    這篇文章主要介紹了從MySQL到Redis的簡(jiǎn)單數(shù)據(jù)庫(kù)遷移方法,注意Redis數(shù)據(jù)庫(kù)基于內(nèi)存,并不能代替?zhèn)鹘y(tǒng)數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2015-06-06
  • 基于Redis實(shí)現(xiàn)共享Session登錄的實(shí)現(xiàn)

    基于Redis實(shí)現(xiàn)共享Session登錄的實(shí)現(xiàn)

    本文主要介紹了基于Redis實(shí)現(xiàn)共享Session登錄的實(shí)現(xiàn),包括發(fā)送短信驗(yàn)證碼、短信驗(yàn)證碼登錄和注冊(cè)、以及登錄狀態(tài)校驗(yàn)的流程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • Redis快速實(shí)現(xiàn)分布式session的方法詳解

    Redis快速實(shí)現(xiàn)分布式session的方法詳解

    Session是客戶端與服務(wù)器通訊會(huì)話跟蹤技術(shù),服務(wù)器與客戶端保持整個(gè)通訊的會(huì)話基本信息。本文主要介紹了Redis快速實(shí)現(xiàn)分布式session的方法,感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • Redis cluster集群的介紹

    Redis cluster集群的介紹

    今天小編就為大家分享一篇關(guān)于Redis cluster集群的介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Redisson如何解決Redis分布式鎖提前釋放問(wèn)題

    Redisson如何解決Redis分布式鎖提前釋放問(wèn)題

    本文主要介紹了Redisson如何解決Redis分布式鎖提前釋放問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 一篇文章讓你明白R(shí)edis主從同步

    一篇文章讓你明白R(shí)edis主從同步

    今天小編就為大家分享一篇關(guān)于一篇文章讓你明白R(shí)edis主從同步,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • redis實(shí)現(xiàn)加鎖的幾種方法示例詳解

    redis實(shí)現(xiàn)加鎖的幾種方法示例詳解

    這篇文章主要給大家介紹了關(guān)于redis實(shí)現(xiàn)加鎖的幾種方法,加鎖命令分別是INCR、SETNX和SET,文中給出了詳細(xì)的示例代碼,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 幾分鐘教你掌握Redis簡(jiǎn)單動(dòng)態(tài)字符串SDS

    幾分鐘教你掌握Redis簡(jiǎn)單動(dòng)態(tài)字符串SDS

    這篇文章主要為大家介紹了幾分鐘教你掌握Redis簡(jiǎn)單動(dòng)態(tài)字符串SDS方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • python中使用redis用法詳解

    python中使用redis用法詳解

    Redis擁有豐富的數(shù)據(jù)結(jié)構(gòu),擁有事務(wù)功能,保證命令的原子性。由于是內(nèi)存數(shù)據(jù)庫(kù),讀寫(xiě)非常高速,可達(dá)10w/s的評(píng)率,所以一般應(yīng)用于數(shù)據(jù)變化快、實(shí)時(shí)通訊、緩存等。這篇文章給大家講解一下Python如何使用Redis,并進(jìn)行相關(guān)的實(shí)戰(zhàn)操作。
    2022-12-12
  • Redis源碼解析:集群手動(dòng)故障轉(zhuǎn)移、從節(jié)點(diǎn)遷移詳解

    Redis源碼解析:集群手動(dòng)故障轉(zhuǎn)移、從節(jié)點(diǎn)遷移詳解

    這篇文章主要介紹了Redis源碼解析:集群手動(dòng)故障轉(zhuǎn)移、從節(jié)點(diǎn)遷移的相關(guān)內(nèi)容,涉及通過(guò)集群定時(shí)器函數(shù)clusterCron實(shí)現(xiàn)從節(jié)點(diǎn)遷移等知識(shí),具有一定參考價(jià)值,需要的朋友可以了解。
    2017-10-10

最新評(píng)論

达孜县| 山丹县| 南木林县| 黑山县| 孙吴县| 渭南市| 白河县| 大埔区| 金溪县| 中方县| 湖州市| 德令哈市| 剑河县| 湘乡市| 台东市| 宿松县| 蕲春县| 永寿县| 新平| 柏乡县| 汉寿县| 黔西县| 左云县| 兖州市| 新竹县| 时尚| 大洼县| 南陵县| 临澧县| 上蔡县| 习水县| 章丘市| 广宁县| 玉山县| 安义县| 思茅市| 牟定县| 阿拉尔市| 彰武县| 蒲城县| 金沙县|