python迁移redis数据库
python3迁移redis数据库,注意数据写入后的编码问题。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import redis
redis_1 = redis.StrictRedis(host='192.168.2.3',port=6379,password="password",db=2,socket_connect_timeout=6000,encoding='GBK')
redis_2 = redis.StrictRedis(host='192.168.2.6',db=2,port=63790,password="password")
def copydb():
for key in redis_1.keys():
# 转成字符串形式
key = str(key)[2:-1]
key_type = str(redis_1.type(key))[2:-1]
#对字符串类型的键值对执行操作------------------------------------------
if key_type == 'string':
print(redis_1.get(key))
redis_2.set(key,str(redis_1.get(key),encoding='utf-8')[2:-1])
print('写入到数据库B成功,{}'.format(redis_2.get(key)))
#对哈希字典类型的键值对执行操作-----------------------------------------
if key == 'ip_op_unit_wbj' :
for son_key in redis_1.hkeys(key):
son_key = str(son_key,encoding='utf-8')
son_value = str(redis_1.hget(key,son_key),encoding='utf-8')
print(son_value)
redis_2.hset(key,son_key,son_value)
print('写入到数据库B成功,{}'.format(redis_2.hgetall(key)))
#对列表类型的键值对执行操作---------------------------------------------
elif key_type == 'list':
print('redis_1:',redis_1.lrange(key, 0, redis_1.llen(key)))
for value in redis_1.lrange(key, 0, redis_1.llen(key)):
v1 = str(value,encoding='utf-8')[2:-1]
redis_2.rpush(key, v1)
print('写入到数据库B成功,{}'.format(redis_2.llen(key)))
#对集合类型的键值对执行操作---------------------------------------------
elif key_type == 'set':
print('redis_1:',key, redis_1.scard(key))
for value in redis_1.smembers(key):
value = str(value,encoding='utf-8')[2:-1]
redis_2.sadd(key,value)
print('写入到数据库B成功,{}'.format(redis_2.scard(key)))
#对有序集合类型的键值对执行操作------------------------------------------
elif key_type == 'zset':
for value in redis_1.zrangebyscore(key, 0, 1000000000):
value = str(value)[2:-1]
print(key)
score = redis_1.zscore(key, value)
redis_2.zadd(key, {value: score})
print('\n写入到数据库B成功,{}'.format(redis_2.zcard(key)))
if __name__ == '__main__':
copydb()