场景:
需要按照指定的 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 来读取文本的多个字段。