记一次 Redis 数据库迁移
笔者通过一个 Redis 数据库迁移的例子,介绍了迁移脚本的执行思路。
作者:马文斌,MySQL/Redis 爱好者~
爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
本文约 500 字,预计阅读需要 2 分钟。
业务背景
最近因业务需要将集群中的 Redis db8 迁移到另一个库中。不需要把全部的 Redis 都迁移过去,只需要迁移 db8 到新服务器的 db15。
大概情况是这样,如图:
当然也探索了一些开源工具看能否实现,最后效果都不太理想,于是自己手撸一个脚本来迁移吧。
migrate_redis.py
以下是脚本内容。
import redis import time # 定义 redis1 和 redis 主机信息 redis1_host = '192.168.1.1' redis1_port = 6579 redis1_db = 8 redis1_password = 'xxxx' redis2_host = '192.168.1.1' redis2_port = 6579 redis2_db = 15 redis2_password = 'xxxx' # 连接 redis1 和 redis2 并验证密码 redis1 = redis.StrictRedis(host=redis1_host, port=redis1_port, db=redis1_db, password=redis1_password) redis2 = redis.StrictRedis(host=redis2_host, port=redis2_port, db=redis2_db, password=redis2_password) # 设置每次批量迁移的数据量 batch_size = 1000 # 为进度跟踪初始化变量 keys_processed = 0 start_time = time.time() # 使用 SCAN 批量获取 key cursor = '0' total_keys = len(redis1.keys('*')) while cursor != 0: cursor, keys = redis1.scan(cursor, count=batch_size) for key in keys: key_data = redis1.dump(key) redis2.restore(key, 0, key_data, replace=True) keys_processed += 1 # 每 1000 个 key 打印一次进度 if keys_processed % batch_size == 0 or keys_processed == total_keys: elapsed_time = time.time() - start_time keys_per_second = batch_size / elapsed_time estimated_remaining_time = (total_keys - keys_processed) / keys_per_second print(f"Processed {keys_processed}/{total_keys} keys. " f"Elapsed Time: {elapsed_time:.2f} seconds. " f"Estimated Remaining Time: {estimated_remaining_time:.2f} seconds for the next 1000 keys.") # 为下一批次重置变量 start_time = time.time() print("Data migration completed.")
输出效果
每隔 1000 个 key 打印一次输出,并评估剩余迁移时间。
Processed 1000/3592 keys. Elapsed Time: 16.46 seconds. Estimated Remaining Time: 42.67 seconds for the next 1000 keys. Processed 2000/3592 keys. Elapsed Time: 16.96 seconds. Estimated Remaining Time: 27.01 seconds for the next 1000 keys. Processed 3000/3592 keys. Elapsed Time: 17.03 seconds. Estimated Remaining Time: 10.08 seconds for the next 1000 keys. Processed 3592/3592 keys. Elapsed Time: 9.81 seconds. Estimated Remaining Time: 0.00 seconds for the next 1000 keys. Data migration completed. Process finished with exit code 0
迁移完之后检查
运行 info
命令检查:
源库 3592 个 key,目标库也是 3592 个 key, 迁移完成,收工!
更多技术文章,请访问:https://opensource.actionsky.com/
关于 SQLE
SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。
SQLE 获取

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
奶茶上云,原生的更好喝
一年卖出 8 亿杯,考验的不仅是奶茶的品牌、口感和性价比,还得有一套打通线上和线下、连接上下游供应链、以保障丝滑购买体验的数字化系统。 茶百道成立于 2008 年,起初,茶百道坚持一步一个脚印,用了 8 年时间门店数量也只有 100 家。转折点发生在 2018 年,在这一年,茶百道正式开放全国性加盟,准备用规模来换市场。2020 到 2022 三年期间,营收和净利润都增长了 4 倍有余。这三年,也是茶百道数字化系统成功云原生化的演进历程。 茶百道的小程序页面 茶百道早期的 IT 业务系统由外部 SaaS 服务商提供,在满足业务扩张过程出现的新的业务需求,显得捉襟见肘。例如: 需要在原有的会员、订单、营销三中心上,开发更多的业务功能,例如积分商城、外卖系统、加盟招募等; 需要新增移动端小程序,并且做到随时可以发布新版本、以持续提升线上购买体验; 需要应对不定期举办的线上和线下营销活动所带来的消费波峰,不出现线上故障。 时间就是竞争力,在竞争激烈的茶饮市场,茶百道决定组建自己的软件开发团队,并借助阿里云的云原生产品和技术,全面升级包括店务、POS、用户交易、平台对接、门店管理、餐饮制作等业...
- 下一篇
全球领先的向量数据库公司,过去一年都做了哪些事情?
全球领先的向量数据库公司,过去一年都做了哪些事情?
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块