繁体   English   中英

Redis的将所有的密钥从一个数据库到另一个

[英]Redis move all keys from one database to another

是否有将 redis 密钥从一个数据库移动到另一个数据库的命令,还是只能使用 lua 脚本?

已经有这样的问题perviously问Redis的将所有的密钥但答案是不恰当的,说服像我这样的初学者。

我认为这将做的工作:

redis-cli keys '*' | xargs -I % redis-cli move % 1 > /dev/null

(1为新的数据库数量,并重定向到/ dev / null是为了避免让“1”数百万行 - 因为它会移动关键一招一式,每次返回1)

要注意的是Redis的可能连接耗尽,然后会显示吨这样的错误:

无法连接到的Redis在127.0.0.1:6379:不能分配请求的地址

因此它可能是更好的(和更快的),只是转储数据库,然后将其导入到新的一个。

ü可以使用“移动”移动一个键到另一个Redis的数据库;

下面的文字是从redis.io

MOVE密钥DB

从当前选择的数据库(参见SELECT)到指定的目标数据库移动键。 当钥匙在目标数据库中已经存在,或者它不会在源数据库中存在,它什么都不做。 它可以使用MOVE作为原始因为这个锁定。

返回值

整数回复,具体如下:

  • 1,如果键被感动了。
  • 0,如果键未动。

如果你有几百万密钥的大的数据库,你可以使用SCAN命令选择所有的按键(不阻塞,如危险KEYS命令,即使是Redis的作者不推荐)。

SCAN由“网页”一一给你钥匙和想法是从0开始页面(正式名称CURSOR 0),然后继续下一个页面/光标,直到你打到最后(当你得到的停止信号CURSOR 0再次)。

你可以使用这个像Redis的或Ruby或Scala的任何流行的语言。 这里使用bash脚本草稿:

#!/bin/bash -e

REDIS_HOST=localhost
PAGE_SIZE=10000
KEYS_TO_QUERY="*"
SOURCE_DB=0
TARGET_DB=1

TOTAL=0
while [[ "$CURSOR" != "0" ]]; do
  CURSOR=${CURSOR:-0}
  >&2 echo $TOTAL:$CURSOR
  KEYS=$(redis-cli -h $REDIS_HOST -n $SOURCE_DB scan $CURSOR match "$KEYS_TO_QUERY" count $PAGE_SIZE)
  unset CURSOR
  for KEY in $KEYS; do
    if [[ -z $CURSOR ]]; then
      CURSOR=$KEY
    else
     TOTAL=$(($TOTAL + 1))
     redis-cli -h $REDIS_HOST -n $SOURCE_DB move $KEY $TARGET_DB
    fi
  done
done

重要提示:像往常一样,请不要复制和粘贴脚本,而无需了解什么是干什么的,所以这里的一些细节:

while循环是通过网页与选择键页SCAN命令,并与随后每个关键运行MOVE命令。

SCAN命令将返回下一个光标在第一行,然后将线的其余部分将是所找到的键。 的同时与可变循环开始CURSOR没有定义,然后在第一环路定义(这是一些魔术只停止在下一CURSOR 0,这将用信号通知扫描结束)

PAGE_SIZE是多久将是每个扫描查询的价值,较低的值会影响服务器上非常低,但将是缓慢的,更大的值将使服务器“汗”但速度更快...这里的网络受到影响,所以要尽量找到一个最佳点周围10000或甚至50000(讽刺值的1或2个还可以强调服务器,但由于每个查询的网络包裹部分)

KEYS_TO_QUERY :这是您要查询的按键模式,如"*balance*" witll选择,其中包括键balance在关键的名称(不要忘了包括引号,以避免语法错误)......另外你可以在脚本侧的滤波,只是查询所有关键用"*" ,并添加一个bash脚本if有条件的,这将是慢,但如果你不能找到你的钥匙的选择,这将有助于模式。

REDIS_HOST :使用本地主机在默认情况下,将其改为任意服务器你喜欢(如果你使用的不是默认端口6379,你也可以用类似的东西包括它的自定义端口myredisserver:4739

SOURCE_DB :你想要的数据库ID键从移动(默认为0)

TARGET_DB :你想要的数据库ID键移动到(默认为1)

你可以使用这个脚本用钥匙才能执行其他命令或检查,只需更换MOVE命令调用任何你可能需要。

注:要从一个Redis的服务器移动键,另一个Redis的服务器(这不仅内部数据库之间移动),可以使用Redis的-utils的-CLI从这里NPM包- > https://www.npmjs.com/package/ Redis的-utils的-CLI

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM