redis-move.py

Скрипт для переноса ключей между базами redis

redis-move.py (Источник)

#!/usr/bin/python
# -*- coding: utf-8 -*-

'''
redis-move.py: Script for move keys via redis DB
'''

__author__ = 'Nikolay Gatilov'
__copyright__ = 'Nikolay Gatilov'
__license__ = 'GPL'
__version__ = '1.0.20150408'
__maintainer__ = 'Nikolay Gatilov'
__email__ = 'eking.work@gmail.com'

from optparse import OptionParser
from multiprocessing import Pool
import redis
import sys


def mig(c):
    fromredis.execute_command("MIGRATE",
                              options.th,
                              options.tp,
                              c,
                              options.td,
                              options.t)


parser = OptionParser(description='Script for move keys via redis DB',
                      usage='usage: %prog [options] keymask ')
parser.add_option('--fh', type='string', dest='fh',
                  help='from host; default 127.0.0.1', default='127.0.0.1')
parser.add_option('--fp', type='int', dest='fp',
                  help='from port; default 6379', default=6379)
parser.add_option('--th', type='string', dest='th',
                  help='to host; default 127.0.0.2', default='127.0.0.2')
parser.add_option('--tp', type='string', dest='tp',
                  help='to port; default 6379', default='6379')
parser.add_option('--fd', type='int', dest='fd',
                  help='from DB; default 0', default=0)
parser.add_option('--td', type='string', dest='td',
                  help='to DB; default 0', default='0')
parser.add_option('-t', type='string', dest='t',
                  help='timeout for MIGRATE command; default 1000',
                  default='1000')
parser.add_option('-p', type='int', dest='p',
                  help='number of processes; default 32', default=32)

(options, args) = parser.parse_args()

try:
    keymask = args[0]
except:
    parser.print_help()
    sys.exit()

fromredispool = redis.ConnectionPool(host=options.fh,
                                     port=options.fp,
                                     db=options.fd)

fromredis = redis.Redis(connection_pool=fromredispool)

L = fromredis.keys(keymask)

print '\nFound {0} keys, migrating...\n'.format(len(L))

pool = Pool(processes=options.p)
pool.map(mig, iter(L))

Пример использования:

eking@eking:~$ time python redis-move.py
Usage: redis-move.py [options] keymask

Script for move keys via redis DB

Options:
 -h, --help  show this help message and exit
 --fh=FH     from host; default 127.0.0.1
 --fp=FP     from port; default
 --th=TH     to host; default 127.0.0.2
 --tp=TP     to port; default 6379
 --fd=FD     from DB; default 0
 --td=TD     to DB; default 0
 -t T        timeout for MIGRATE command; default 1000
 -p P        number of processes; default 32

eking@eking:~$ time python redis-move.py --fh='10.10.10.110' --th='10.10.10.206' "*000000"

Found 3 keys, migrating...


real 0m0.989s
user 0m0.032s
sys  0m0.024s
eking@eking:~$