首页 > 数据库 >redis迁移同步工具-redis-shake

redis迁移同步工具-redis-shake

时间:2023-06-05 10:05:15浏览次数:42  
标签:return -- redis db keys shake 迁移 id

官方文档: https://github.com/alibaba/RedisShake/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%EF%BC%9A%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB 下载: https://github.com/alibaba/RedisShake/releases

redis-shake.toml 单机到单机配置,源 6383 目标端 6384 启动,增量同步

./redis-shake-linux-amd64 redis-shake.toml

--此启动方式将会 把源端所有数据增量同步到目标端, 目标端现有数据key与源端相同的情况下,会被覆盖, 不同的情况下会保留目标端现有数据,单机同步到集群时需用fifter脚本过滤 源库db到目标库db0

如有数据清洗需求,可使用filter 脚本 官方文档:https://github.com/alibaba/RedisShake/wiki/%E4%BD%BF%E7%94%A8-filters-%E5%81%9A%E6%95%B0%E6%8D%AE%E6%B8%85%E6%B4%97

脚本说明: filter 脚本使用 lua 语言编写,在启动 redis-shake 的时候通过命令行传入: ./redis-shake sync.toml ../filters/print.lua
filter 脚本内需要实现一个名为 filter 的 lua 函数:

function filter(id, is_base, group, cmd_name, keys, slots, db_id, timestamp_ms) -- write something return 0, db_id end

参数说明: id:number 类型,redis-shake 会对所有数据进行编号,无意义 is_base:boolean 类型,代表这条数据是否是 dump.rdb 中的,可用于跳过存量数据,只同步增量数据。 group:string 类型,代表这条数据是什么类型的,大写,比如 STRING、HASH、LIST、SET 等 cmd_name:string 类型,代表 Redis 命令,大写,比如:HSET、XADD、LPOP 等 keys:table 类型,代表命令中的 key,这里使用 table 类型是因为有多个 key 的命令,比如 MSET。 slots:table 类型,对应 key 所属于的 slot。 db_id:number 类型,databse id。 timestamp_ms:时间戳,目前不可用。

返回值说明: code:可选值 0,1,2 0:允许此条数据发送至对端 1:跳过此条数据 2:不应该出现此数据,立即终止 redis-shake db_id:代表这条命令会发送到哪个 database,只在 swap.db 中使用。一般情况下与传入 db_id 保持一致即可。

示例脚本1:

---指定db5数据同步到db6
---指定db8数据同步到db9
---其他db数据不同步


function filter(id, is_base, group, cmd_name, keys, slots, db_id, timestamp_ms)
    if db_id == 5 then
        -- print("db_id is 5, redirect to 6")
        return 0, 6
    elseif db_id == 8 then
        -- print("db_id is 8, redirect to 9")    
        return 0, 9
    else
        return 1, db_id
    end
end

示例脚本2:过滤掉前缀为 ABC 的数据:

-- skip keys prefixed with ABC
function filter(id, is_base, group, cmd_name, keys, slots, db_id, timestamp_ms)
    if #keys ~= 1 then
        return 0, db_id -- allow
    end

    if string.sub(keys[1], 0, 3) == "ABC" then
    return 1, db_id -- disallow
    end

    return 0, db_id -- allow
end

示例脚本3: 过滤前缀AB并指定同步db 10 到 db 11

function filter(id, is_base, group, cmd_name, keys, slots, db_id, timestamp_ms)

    if #keys ~= 1 then
        return 0, db_id -- allow
    end

     ---           0开始截取的索引   2结束时的索引                
    if string.sub(keys[1], 0, 2) == "AB" and db_id == 10 then              
    return 0, 11 -- disallow   ---同步到db11

    else
    return 1, db_id -- allow     ---其他库都不同步
    end

end

标签:return,--,redis,db,keys,shake,迁移,id
From: https://blog.51cto.com/u_15204812/6413203

相关文章

  • redis的增删改查
    增加(添加)操作:设置单个键值对:SETkeyvalue设置多个键值对:MSETkey1value1key2value2...添加元素到列表的尾部:RPUSHkeyelement添加元素到集合:SADDkeymember删除操作:删除单个键:DELkey删除多个键:DELkey1key2...从列表中删除元素:LREMkeycountelement从......
  • rodert单排学习redis入门【黑铁】
    文章目录前言1.NoSql(notonlysql)2.Redis入门3.Redis特性3.1.性能3.2.特性3.3.优势4.Redis使用场景5.安装5.1.单机安装5.1.1.windows下5.1.2.linux下6.五类数据结构6.0.说明6.1.介绍6.2.Rediskeys6.2.字符串(strings)6.3.列表(Lists)6.4.哈希(Hash)6.5.集合(Set)6.6.有序集合(sorted......
  • Redis(三) -- 其他数据类型和数据持久化
    其他数据类型ListLPUSHLPUSHkeyvalue[value...]--将一个或多个值value插入到列表key的表头--如果有多个value值,那么各个value值按从左到右的顺序依次插入到表头:比如说,对空列表mylist执行命令LPUSHmylistabc,列表的值将是cba,这等同于原子性地执行L......
  • Redis_主从复制
    一、主从复制介绍主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,Master以写为主,slave以读为主好处:读写分离,性能扩展;容灾快速恢复(一主多从):一台slave从机挂掉,马上切换到另一台slave从机提供服务。主机挂:集群集群:一主多从——关联——一主多从二、主从复制配......
  • 缓存雪崩【Redis 缓存】
    缓存雪崩缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。解决方案:给不同的Key的TTL添加随机值利用Redis集群提高服务的可用性给缓存业务添加降级限流策略给业务添加多级缓存 ......
  • 缓存穿透【Redis 缓存】
    缓存穿透缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会失效,这些请求都会打到数据库。解决方案:1.缓存空对象优点:实现简单,维护方便缺点:额外的内存消耗可能造成短期的不一致 2.布隆过......
  • Redis持久化——AOF
    AOF(AppendOnlyFile)以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读指令不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。【默......
  • Redis持久化——RDB
    RDB(RedisDataBase)在指定的时间间隔内将内存的数据集快照(当前某点的数据snapshot)写入磁盘,它恢复时是将快照文件直接读到内存里【默认开启】备份如何执行:Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件【保证数据的一致性和完整性】中,待持久化过......
  • Redis主从复制
    主从复制简介主从复制即将master中的数据即时、有效的复制到slave中。。特征:一个master可以拥有多个slave,一个slave只对应一个master职责:master写数据执行写操作时,将出现变化的数据自动同步到slave读数据(可忽略)slave读数据写数据(禁止)......
  • 基于2.8版本redis配置文件中文解释
        在Redis中直接启动redis-server服务时,采用的是默认的配置文件。采用redis-server xxx.conf这样的方式可以按照指定的配置文件来运行Redis服务。下面是Redis2.8.9的配置文件各项的中文解释。1#daemonizeno默认情况下,redis不是在后台运行的,如果需要在后台运......