是否可以使用redis的MOVE命令将所有密钥从1个数据库移动到另一个数据库? move命令只移动1个键,但我需要移动数据库中的所有键。
答案 0 :(得分:3)
我建议您查看以下alpha版应用来备份和恢复redis数据库..(您可以通过gem install redis-dump
安装它)。您可以redis-dump您的数据库,然后通过--database参数redis-load到另一个数据库。
如果这不适合您的目的,您可能需要使用脚本语言的redis绑定(或者使用bash / redis-cli / xargs等将某些东西放在一起)。如果您需要这些方面的帮助,我们可能首先需要更多详细信息。
答案 1 :(得分:1)
我写了一个小的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
答案 2 :(得分:1)
你可以尝试我自己的工具,rdd
这是一个命令行实用程序,
可以将数据库转储到文件中,对其进行处理(过滤,匹配,合并,...),然后将其备份到redis实例中
小心,alpha阶段,https://github.com/r043v/rdd/
答案 3 :(得分:0)
现在redis使用lua编写脚本,你可以轻松编写一个循环遍历所有键的命令,检查它们的类型并相应地将它们移动到新的数据库。
答案 4 :(得分:-3)
我建议你可以尝试如下: 1.将rdb文件复制到另一个目录; 2.修改rdb文件名; 3.将redis configure文件适配器修改为新的db;