Redis переместить все ключи - PullRequest
7 голосов
/ 26 марта 2011

возможно ли использовать команду MOVE для перемещения всех ключей из одной базы данных в другую? Команда перемещения только перемещает 1 клавишу, но мне нужно переместить все ключи в базе данных.

Ответы [ 5 ]

3 голосов
/ 27 марта 2011

Я бы порекомендовал взглянуть на следующее приложение альфа-версии для резервного копирования и восстановления баз данных Redis .. (вы можете установить его через gem install redis-dump). Вы можете перезапустить свою базу данных, а затем снова загрузить ее в другую базу данных через аргумент --database.

проект Redis-dump

Если это не соответствует вашим целям, вам может понадобиться использовать привязки redis языка сценариев (или альтернативно собрать что-то вместе, используя bash / redis-cli / xargs и т. Д.). Если вам нужна помощь в этом направлении, то, возможно, нам сначала понадобится больше информации.

1 голос
/ 20 февраля 2012

Вы можете попробовать мой собственный инструмент, RDD

это утилита командной строки,

может выгружать базу данных в файл, работать с ним (фильтровать, сопоставлять, объединять, ...) и сохранять его в экземпляре redis

Береги себя, альфа-стадия, https://github.com/r043v/rdd/

1 голос
/ 11 ноября 2011

Я написал небольшой скрипт на 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
0 голосов
/ 31 июля 2012

Предлагаю попробовать, как показано ниже: 1. скопировать файл rdb в другой каталог;2. изменить имя файла rdb;3. измените адаптер файла конфигурации redis на новый db;

0 голосов
/ 21 июня 2011

Теперь, когда в Redis есть сценарии с использованием lua, вы можете легко написать команду, которая перебирает все ключи, проверяет их тип и перемещает их соответственно в новую базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...