那朵莲 發表於 2025-11-18 08:29:24

基于Redis-Shake实现Redis实时同步的示例代码

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、前言</a></li><li><a href="#_label1">二、实施步骤</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">2.1 下载redis-shake二进制安装包</a></li><li><a href="#_lab2_1_1">2.2 配置rsync模块文件</a></li><li><a href="#_lab2_1_2">2.3 配置systemd</a></li><li><a href="#_lab2_1_3">2.4 启动并设置为自启</a></li></ul><li><a href="#_label2">三、验证</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>一、前言</h2>
<p>Redis-Shake是阿里云技术团队开源的一款Redis数据迁移与处理工具,支持数据迁移、备份、恢复和实时同步等多种功能。能够帮助你在不同Redis环境之间稳定高效的移动数据。</p>
<p>核心功能</p>
<ul><li>sync(同步):支持全量数据迁移和增量数据实时同步,适用于业务不停服迁移、异地容灾、多活架构</li><li>dump(备份):将源Redis的数据备份到RDB文件中,适用于为数据备份、数据恢复做准备</li><li>Restore(恢复):将RDB文件中的数据恢复到目标Redis实例。适用于数据恢复、从备份文件快速搭建新环境</li><li>rump(扫描): 通过SCMP命令迁移数据,适用于不支持SYNC/PSYNC命令的环境。适用于迁移Codis、Twemproxy等代理架构的数据</li></ul>
<p class="maodian"><a name="_label1"></a></p><h2>二、实施步骤</h2>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>2.1 下载redis-shake二进制安装包</h3>
<div class="jb51code"><pre class="brush:bash;">#wget https://github.com/alibaba/RedisShake/releases/download/v3.1.7/redis-shake-linux-amd64.tar.gz
#tar zxvf redis-shake-linux-amd64.tar.gz -C /root/</pre></div>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>2.2 配置rsync模块文件</h3>
<p><span>在这里定义源端redis和目标redis相关信息即可</span></p>
<div class="jb51code"><pre class="brush:plain;">
address = "源Redis地址:端口"# 例如:192.168.1.1:6379


address = "目标Redis地址:端口" # 例如:r-bp1xxxxx.redis.rds.aliyuncs.com:6379


parallel = 32# 并发线程数,根据服务器性能调整


# 可选:跳过以"temp:"或"cache:"开头的Key
block_key_prefix = ["temp:", "cache:"]</pre></div>
<p class="maodian"><a name="_lab2_1_2"></a></p><h3>2.3 配置systemd</h3>
<p><span>配置redis-shake服务,将其托管至systemd</span></p>
<div class="jb51code"><pre class="brush:plain;">#vim /etc/systemd/system/redis-shake.service

Description=RedisShake Data Sync Service
After=network.target


Type=simple
User=root
Group=root
WorkingDirectory=/root/redis-shake
ExecStart=/root/redis-shake/redis-shake /root/redis-shake/sync.toml
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal


WantedBy=multi-user.target</pre></div>
<p class="maodian"><a name="_lab2_1_3"></a></p><h3>2.4 启动并设置为自启</h3>
<p><span>启动后,Redis-Shake会先在屏幕上打印全量同步的进度日志。当你看到&nbsp;</span><code><span>sync rdb done</span></code><span>&nbsp;的提示时,就意味着它已经进入了增量同步阶段,会持续将源实例的变更实时同步到目标实例</span></p>
<div class="jb51code"><pre class="brush:bash;">#systemctl daemon-reload
# systemctl enable --now redis-shake
Created symlink from /etc/systemd/system/multi-user.target.wants/redis-shake.service to /etc/systemd/system/redis-shake.service.</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202511/2025111808281078.png" /></p>
<p class="maodian"><a name="_label2"></a></p><h2>三、验证</h2>
<p><span>测试我们可以在源端redis创建测试键值对。如下</span></p>
<div class="jb51code"><pre class="brush:sql;">127.0.0.1:6379&gt; SELECT 1
OK
127.0.0.1:6379&gt; SET test_bxy "test_value1"
OK</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202511/2025111808281027.png" /></p>
<p><span>在目标端redis验证 键值对是否同步过来。</span></p>
<div class="jb51code"><pre class="brush:sql;">redis-cli -h 192.168.x.x-p 9736 -a 123456 -n 1 GET test_bxy</pre></div>
<p><span>由此可见,目标端键值对数据已同步过来了。</span></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202511/2025111808281067.png" /></p>
頁: [1]
查看完整版本: 基于Redis-Shake实现Redis实时同步的示例代码