python操作redis两个数据库间的数据迁移案例(hash)


#!/usr/bin/env python
#coding=utf8
#redis两个数据库间的数据迁移

import redis
import json

redis_conn_6300 = redis.Redis(host="127.0.0.1",port="6300",password="123456",db=0)

redis_conn_5550 = redis.Redis(host="127.0.0.1",port="5550",password="123456",db=0)

server_id = 41
index = 0
redis_center_pids=[]

while True:
    index,data = redis_conn_6300.scan(index,count=1000)
    for x in data:
        if (server_id<<20) < int(x) < (server_id+1<<20):    #偏移量20位,取值id的一种算法
            redis_center_pids.append(x)
            #print x
    if index == 0: break    #如果新游标返回0表示迭代已结束

for pid in redis_center_pids:
    value =  redis_conn_6300.hgetall(pid)    #获取对应key下的所有内容
    print value    #获得第一个数据库对应key的值,类型为 dict
    redis_conn_5550.hmset(pid,value)    #插入类型为 dict 的数据到另一个数据库  hmset(key,value)

'''
Redis Scan 命令用于迭代数据库中的数据库键。
SCAN 命令是一个基于游标的迭代器,每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数,以此来延续之前的迭代过程。
SCAN 返回一个包含两个元素的数组,第一个元素是用于进行下一次迭代的新游标,而第二个元素则是一个数组,这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。
当 SCAN 命令的游标参数被设置为 0 时,服务器将开始一次新的迭代,而当服务器向用户返回值为 0 的游标时,表示迭代已结束。
'''