Redis 按照Key前缀导出数据,导入到另一个 Redis 中
场景:需要按照指定的 Key 前缀导出 redis 的数据,然后导入到另一个 redis 服务器中。
·
场景:
需要按照指定的 Key 前缀导出 redis 的数据,然后导入到另一个 redis 服务器中。
1.使用 redis 的 keys 指令读取指定前缀的所有 key,然后使用 get 指令读取所有内容, 输出到控制台。
$cat redis_print.sh
#!/bin/bash
# Default to '*' key pattern, meaning all redis keys in the namespace
REDIS_KEY_PATTERN="Template*"
for key in $(redis-cli -h host -p 6379 -a xxx keys "$REDIS_KEY_PATTERN")
do
type=$(redis-cli -h host -p 6379 -a xxx type $key)
if [ $type = "list" ]
then
printf "$key => \n$(redis-cli -h host -p 6379 -a xxx lrange $key 0 -1 | sed 's/^/ /')\n"
elif [ $type = "hash" ]
then
printf "$key => \n$(redis-cli -h host -p 6379 -a xxxx hgetall $key | sed 's/^/ /')\n"
else
printf "$key => $(redis-cli -h host -p 6379 -a xxx get $key)\n"
fi
done
替换上面的服务器, 以及秘钥然后执行脚本。 如果没有密码不需要 -a 参数。
执行脚本 保存 key => value 键值对到 redis.script 文件中。
source redis_print.sh > redis.script
2.使用 awk, xargs 读取文本文件内容, 导入到新的 redis 服务器中。
awk -F"=>" '{gsub("\"", "\\\"", $2) ;print $1 $2}' redis.script | xargs -L1 bash -c 'redis-cli -h redis-server.xxxx.com -a mypassword set $0 $1 '
这个命令具体的参数解释,参考上一篇博客 如何组合使用 awk/xargs 来读取文本的多个字段。
更多推荐
已为社区贡献7条内容
所有评论(0)