[英]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作为原始因为这个锁定。
返回值
整数回复,具体如下:
如果你有几百万密钥的大的数据库,你可以使用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.