用redis将所有密钥从一个db复制到另一个db

时间:2014-04-22 14:36:23

标签: redis

我想将所有密钥从特定数据库复制到另一个数据库,而不是移动。 如果是,可以在redis中使用吗?

9 个答案:

答案 0 :(得分:26)

如果由于您的redis版本而无法使用MIGRATE COPY,您可能需要单独复制每个密钥,这需要更长的时间,但不要求您自己登录计算机并允许您从一个计算机移动数据数据库到另一个。 这是我如何将所有键从一个数据库复制到另一个数据库(但不保留ttls)

#set connection data accordingly
source_host=localhost
source_port=6379
source_db=0
target_host=localhost
target_port=6379
target_db=1

#copy all keys without preserving ttl!
redis-cli -h $source_host -p $source_port -n $source_db keys \* | while read key; do echo "Copying $key"; redis-cli --raw -h $source_host -p $source_port -n $source_db DUMP "$key" | head -c -1|redis-cli -x -h $target_host -p $target_port -n $target_db RESTORE "$key" 0; done

密钥不会被覆盖,因为在复制之前删除密钥或在启动之前刷新整个数据库。

答案 1 :(得分:0)

不直接。我建议使用总是方便的redis-rdb-tools包(来自Sripathi Krishnan)从正常的rdb转储中提取数据,并将其重新注入另一个实例。

请参阅https://github.com/sripathikrishnan/redis-rdb-tools

答案 2 :(得分:0)

我知道这已经过时了,但对于那些来自Google的人来说:

我刚刚向npm和github发布了一个命令行界面实用程序,它允许您将匹配给定模式(甚至*)的键从一个Redis数据库复制到另一个。

您可以在此处找到该实用程序:

https://www.npmjs.com/package/redis-utils-cli

答案 3 :(得分:0)

redis-cli -a $source_password -p $source_port -h $source_ip keys /*| while read key; 
do echo "Copying $key"; 
redis-cli --raw -a $source_password -h $source_ip -p $source_port -n $dbname DUMP "$key"| head -c -1| redis-cli -x -a $destination_password -h $destination_IP -p $destination_port RESTORE "$key" 0;

答案 4 :(得分:0)

将所有密钥从数据库编号0复制到localhost上的数据库编号1。

redis-cli --scan | xargs redis-cli migrate localhost 6379 '' 1 0 copy keys

如果您使用相同的服务器/端口,您将收到超时错误,但密钥似乎仍然成功复制。 GitHub Redis issue #1903

答案 5 :(得分:0)

如果在同一个redis引擎中迁移密钥,那么你可以使用内部命令MOVE(流水线以获得更快的速度):

#!/bin/bash

#set connection data accordingly
source_host=localhost
source_port=6379
source_db=4
target_db=0

total=$(redis-cli -n 4 keys \* | sed 's/^/MOVE /g' | sed 's/$/ '$target_db'/g' | wc -c)
#copy all keys without preserving ttl!
time redis-cli -h $source_host -p $source_port -n $source_db keys \* | \
  sed 's/^/MOVE /g' | sed 's/$/ 0/g' | \
  pv -s $total | \
  redis-cli -h $source_host -p $source_port -n $source_db >/dev/null

答案 6 :(得分:0)

您只需执行此操作,它将所有键从db 1移动到db 3
redis-cli -n 1 keys '*' | xargs -I % redis-cli move % 3 > /dev/null

答案 7 :(得分:-1)

尝试使用dump首先转储所有密钥,然后恢复相同的

答案 8 :(得分:-1)

据我了解,您需要将密钥从特定的数据库(例如5)复制到特定的数据库,如果是10.如果是这种情况,您可以使用 redis数据库转储程序({{3 }})。虽然根据文档,它有一个开关(-d)来选择一个数据库进行操作,但对我来说没有用,所以我做了什么

1。)编辑 rdd.c 文件并查找int main(int argc,char argv)函数
2.)根据您的要求更改DB 3.)通过** make

编译src 4.)使用 ./ rdd -o" save.rdd" 转储所有密钥 5.)再次编辑rdd.c文件并更改数据库
6.)再次制作
7.)使用 ./ rdd" save.rdd"导入-o insert -s" IP" -p"端口"