Redis-Shake【一】简要介绍

Redis-Shake【一】简要介绍
Redis-Shake【二】 Sync功能实现简介

Redis-Shake

Redis-shake是一个基于golang语言开发的,用于在两个redis之间同步数据的工具,满足用户非常灵活的同步、迁移需求。

github地址 https://github.com/alibaba/RedisShake

支持redis standalone、cluster、sentinel、proxies(如:Codis、twemproxy、Aliyun Cluster Proxy, Tencent Cloud Proxy 等)之间的数据迁移,
redis版本支持2.x to 5.0

支持的迁移模式

decode: 把Redis RDB文件解析成人类可读的文件格式.
restore: 把Rdis RDB文件作为数据源,恢复到目标Redis实例中.
dump: 对源Redis实例中的数据dump到RDB文件中.
sync: 基于Redis sync/psync命令从源redis实例同步到目标Redis实例,该模式包含全量同步和增量同步两个阶段。(通过默认Redis Slave来实现)
rump: 基于Redis scan命令的方式从源Redis同步到目标Redis实例。只支持全量同步,这种方式通常适用于源redis不支持sync/psync命令的场景

sync相比rump模式来说性能较好,通用性较差,一般来说sync模式使用的相对来说更多一些

简单使用

可以参考官网https://github.com/alibaba/RedisShake/wiki/%E7%AC%AC%E4%B8%80%E6%AC%A1%E4%BD%BF%E7%94%A8%EF%BC%8C%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%E9%85%8D%E7%BD%AE%EF%BC%9F

redis-shake二进制包

  • 直接下载二进制包https://github.com/alibaba/RedisShake/releases

  • 手动打包
    这种方式更适合于需要二次定制化开发的场景,首先需要安装golang的开发环境,另外在运行项目的时候可能会遇到一些问题:

    1. 项目中的部分安装下载不下来,可以尝试使用gopm手动下载,下载完成之后可以通过govendor的方式把所有依赖的包放到vendor目录下,这样以后或者别人就不需要下载了
    2. 找不到包github.com/cespare/xxhash/v2,这个是因为prometheus基于依赖于该包,而prometheus是基于gomod构建的,gomod支持能够识别xxhash后面的v2是指定的版本,而redis-shake使用的是govendor不支持版本,解决办法,可以下载github.com/cespare/xxhash/,然后把该文件夹中的内容都copy到github.com/cespare/xxhash/v2目录下即可。

启动命令:
redis-shake --conf={配置文件地址} --type={模式:sync/dump等} 模式需要与配置文件中的source target对应。如下是一个sync模式的配置文件示例:

# id唯一标识一次同步进程
id=redis-shake
# source相关配置
source.type=standalone
source.address=10.xx.xx.xx:6379
source.password_raw={password}
source.auth_type = auth

target.type=standalone
target.address=10.xx.xx.xx:6379
target.password_raw={password}
target.auth_type = auth

# 在rdb全量同步阶段,如果目标redis已经存在对应的key时是否覆盖,如果为false就抛异常
rewrite = true

# 是否做metric统计,建议设置为true,如果设置为false,/metric中的部分参数的值就一直是0
metric = true

下一节介绍一下Redis-Shake Sync的实现原理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • @synthesize和@dynamic分别有什么作用?@property有两个对应的词,一个是 @synthes...
    笔笔请求阅读 547评论 0 1
  • 猜想runloop内部是如何实现的?一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一...
    笔笔请求阅读 449评论 0 0
  • 1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。 作者Antirez的博客,Antirez维护的R...
    JefferyLcm阅读 17,162评论 1 51
  • 包含的重点内容:JAVA基础JVM 知识开源框架知识操作系统多线程TCP 与 HTTP架构设计与分布式算法数据库知...
    消失er阅读 4,422评论 1 10
  • Nosql概述 在介绍Redis之前,首先先要介绍Nosql的概念。 互联网架构发展 在90年代的时候,计算机访问...
    COKIDCC阅读 703评论 0 1