redis 数据迁移



redis 数据的迁移
	之前使用过备份整个库的方式,现在想着能不能只备份指定的 'key',在网上搜搜

	谷歌搜索:
		migrate some keys from one redis to another

	参考文章:
		https://coderwall.com/p/eclzyg/redis-to-redis-data-copy
			1.ruby 语言适用
			2.作者又写了一个 npm 工具
				https://www.npmjs.com/package/redis-utils-cli

		https://kvz.io/blog/2013/04/16/migrate-redis-data-without-filesystem-access/
		http://www.tothenew.com/blog/copying-redis-database-from-one-server-to-another/
			1.这两篇应该表示的是同一个意思,使用 redis 的主从复制,来备份数据

		https://sorentwo.com/2015/09/15/migrating-redis-data.html
			1.这篇文章比较给力,给出了 4种方法,以及每种方法的限制

		https://stackoverflow.com/questions/23222616/copy-all-keys-from-one-db-to-another-in-redis
			1.使用命令行或脚本,借助 dump 和 restore 命令,一个一个键复制

		https://www.cnblogs.com/zhoubaojian/articles/7866595.html
			1.命令行和脚本方式,同一机器不同库,或不同机器的不同库都可以

		https://github.com/sripathikrishnan/redis-rdb-tools
			1.很给力,直接可以解析 redis 的 .rdb 文件为 json 文件,分析内存里的数据等等

		https://jeremy.wordpress.com/2012/07/05/multiple-redis-instances-on-mac-os-x-with-homebrew/
			1.在 mac 一台机器上,同时运行多个 redis 实例(非常适合本地开发使用)

	总结:
		1.move - 本机的多个库之前迁移
		2.migrate - 可以单个、多个键迁移
		3.dump&restore - 单个键迁移,migrate 内部可能就是这么使用的
		4.主从复制
		5.先备份数据库 rdb,然后覆盖

	我们需要复制指定的键,只能使用 migrate 或 dump&restore,命令行或写脚本的方式

这里给出,综合几篇文章,最后测试成功的 导出 redis 数据的 shell 脚本:

	#!/bin/bash
	# 导出 redis 指定数据
	source_host=localhost
	source_port=6379
	#source_socket=/tmp/redis-1.sock
	source_db=0

	target_host=localhost
	#target_port=6379
	target_socket=/tmp/redis-1.sock
	target_db=0

	i=1;
	redis-cli -h $source_host -p $source_port -n $source_db keys "punch_card*" | while read key
	do
	    echo "Copying 第 $i 个 $key"
	    # redis-cli --raw -h $source_host -p $source_port -n $source_db DUMP "$key" | head -c -1|redis-cli -x -h $target_host -s $target_socket -n $target_db RESTORE "$key" 0
	    redis-cli --raw -h $source_host -p $source_port -n $source_db DUMP "$key" | perl -pe 'chomp if eof' | redis-cli -x -h $target_host -s $target_socket -n $target_db RESTORE "$key" 0
	    ((i++))
	done

注意下:
	测试过程中,有时会出现:
		(error) ERR DUMP payload version or checksum are wrong

	可参考:
		https://github.com/antirez/redis/issues/3348
		https://stackoverflow.com/questions/16127682/how-to-use-redis-dump-and-restore-offline

	开始使用的是 'head -c -1' 命令,发现报错,切换成 perl -pe 'chomp if eof',解决!看其他回答应该是删除最后的换行符之类的,大家有兴趣可以自己研究下!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值