场景:

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐