是否可以使用Redis的MOVE命令将一个数据库中的所有键移动到另一个数据库中?MOVE命令只能移动一个键,但我需要移动该数据库中的所有键。
gem install redis-dump
安装它)。 您可以使用redis-dump备份数据库,然后通过--database参数将其加载到另一个数据库中。
redis-dump项目
如果这不符合您的需求,则可能需要使用脚本语言的redis绑定(或者使用bash / redis-cli / xargs等编写一个简单的程序)。 如果您需要沿这些方向的帮助,则我们可能需要更多详细信息。我写了一个小的Python脚本来在两个Redis服务器之间移动数据:(只支持列表和字符串类型,您必须安装Python Redis客户端):
'''
Created on 2011-11-9
@author: wuyi
'''
import redis
from optparse import OptionParser
import time
def mv_str(r_source, r_dest, quiet):
keys = r_source.keys("*")
for k in keys:
if r_dest.keys(k):
print "skipping %s"%k
continue
else:
print "copying %s"%k
r_dest.set(k, r_source.get(k))
def mv_list(r_source, r_dest, quiet):
keys = r_source.keys("*")
for k in keys:
length = r_source.llen(k)
i = 0
while (i<length):
print "add queue no.:%d"%i
v = r_source.lindex(k, i)
r_dest.rpush(k, v)
i += 1
if __name__ == "__main__":
usage = """usage: %prog [options] source dest"""
parser = OptionParser(usage=usage)
parser.add_option("-q", "--quiet", dest="quiet",
default = False, action="store_true",
help="quiet mode")
parser.add_option("-p", "--port", dest="port",
default = 6380,
help="port for both source and dest")
parser.add_option("", "--dbs", dest="dbs",
default = "0",
help="db list: 0 1 120 220...")
parser.add_option("-t", "--type", dest="type",
default = "normal",
help="available types: normal, lpoplist")
parser.add_option("", "--tmpdb", dest="tmpdb",
default = 0,
help="tmp db number to store tmp data")
(options, args) = parser.parse_args()
if not len(args) == 2:
print usage
exit(1)
source = args[0]
dest = args[1]
if source == dest:
print "dest must not be the same as source!"
exit(2)
dbs = options.dbs.split(' ')
for db in dbs:
r_source = redis.Redis(host=source, db=db, password="", port=int(options.port))
r_dest = redis.Redis(host=dest, db=db, password="", port=int(options.port))
print "______________db____________:%s"%db
time.sleep(2)
if options.type == "normal":
mv_str(r_source, r_dest, options.quiet)
elif options.type == "lpoplist":
mv_list(r_source, r_dest, options.quiet)
del r_source
del r_dest
你可以尝试我的工具rdd
它是一个命令行实用程序,
可以将数据库转储到文件中,对其进行操作(过滤、匹配、合并等),然后将其还原到redis实例中
请注意,这是alpha阶段,https://github.com/r043v/rdd/
现在redis使用lua脚本,你可以轻松编写一个命令来循环遍历所有的键,检查它们的类型并将它们移动到新的数据库中。