Python进行Redis数据迁移

由于开发时的误操作,导致redis数据损坏,所以需要进行redis的数据迁移,网上大佬的教程基本都是需要下载附加工具,亦或是需要一些复杂的操作,个人觉得麻烦还不如写个脚本来的经济实惠。

# -*- coding: utf-8 -*-

from redis import StrictRedis
"""
redis是用于操作Redis的第三方库,StrictRedis是官方推荐的方法,而且Redis是它的子类,Redis能做到的StrictRedis基本都能做到
""" def redis_data_migration():
"""
实现方法:遍历源数据库中的键值对,判断类型,用对应的方法在目标数据库中创建对应键值对
:return:
""" '''
连接源数据库与目标数据库。而且你没看错,不需要password,我都不知道是咋校验连接的
'''
# 连接参数需要根据个人情况修改
src_redis = StrictRedis(host='127.0.0.1', port=3306, db=8)
dst_redis = StrictRedis(host='127.0.0.1', port=3307, db=8) print("Begin data migration:") # 遍历键值对
try:
for key in src_redis.keys(): # 键值对数据类型
key_type = str(src_redis.type(key)) # 字符串类型键值对
if key_type == 'string':
# 获取源数据库value
src_value = str(src_redis.get(key))
# 在目标数据库中创建对应键值对
dst_redis.set(key, src_value)
# 插入到目标数据库中的值
dst_value = dst_redis.get(key)
print('Migrate source {} type data{}={} to destination value {}'
.format(key_type, key, src_value, dst_value)) # 哈希字典类型键值对
elif key_type == 'hash':
# 获取源数据库value
src_value = src_redis.hgetall(key)
# 哈希类型键值对需要遍历子键值对进行处理
for son_key in src_value:
son_key = str(son_key)
son_value = str(src_redis.hget(key, son_key))
# 在目标数据库中创建对应键值对
dst_redis.hset(key, son_key, son_value)
# 插入到目标数据库中的值
dst_value = dst_redis.hgetall(key)
print('Migrate source {} type data{}={} to destination value {}'
.format(key_type, key, src_value, dst_value)) # 列表类型键值对
elif key_type == 'list':
# 获取源数据库value,list类型可进行切片获取对应键值
src_value = src_redis.lrange(key, 0, src_redis.llen(key))
for value in src_value:
# 在目标数据库中创建对应键值对
dst_redis.rpush(key, str(value))
# 插入到目标数据库中的值
dst_value = dst_redis.lrange(key, 0, src_redis.llen(key))
print('Migrate source {} type data{}={} to destination value {}'
.format(key_type, key, src_value, dst_value)) # 集合类型键值对
elif key_type == 'set':
# 获取源数据库value
src_value = src_redis.scard(key)
for value in src_redis.smembers(key):
# 在目标数据库中插入对应键值对
dst_redis.sadd(key, str(value))
dst_value = dst_redis.scard(key)
print('Migrate source {} type data{}={} to destination value {}'
.format(key_type, key, src_value, dst_value)) # 有序集合类型键值对
elif key_type == 'zset':
# 获取源数据库value
src_value = src_redis.zcard(key)
# zset类型可以进行键值对范围的选择,这段代码是选择0-100行的键值对
for value in src_redis.zrange(key, 0, 100):
value = str(value)
score = int(src_redis.zscore(key, value))
# 在目标数据库中插入对应键值对
dst_redis.zadd(key, score, value)
# 插入到目标数据库中的值
dst_value = dst_redis.zcard(key)
print('Migrate source {} type data{}={} to destination value {}'
.format(key_type, key, src_value, dst_value)) except Exception as e:
print("Something wrong happened!!!(O。O)")
print(e) if __name__ == '__main__': redis_data_migration()

  

Python进行Redis数据迁移的更多相关文章

  1. Redis 数据迁移 & 数据审计

    Redis 数据迁移 安装迁移工具 # 安装依赖 [root@dbtest03 ~]# yum install -y automake libtool autoconf bzip2 git # 拉取工 ...

  2. Redis数据迁移方案

    场景 Redis实例A ---> Redis实例B,整库全量迁移 方案一: mac环境 brew install npm npm install redis-dump -g 针对RedisA: ...

  3. 使用rdb文件进行redis数据迁移--python脚本

    查找了一些redis迁移的方法,一般做法就是 1. 从源数据库把rdb文件保存,然后传到新的主机上,启动新的redis即可 2. 把新的redis当做源数据库的slave,同步数据 今天开发提了一个测 ...

  4. redis数据迁移

    redis的备份和还原,借助了第三方的工具---redis-dump,  redis中使用redis-dump导出.导入.还原数据实例 1.安装redis-dump # yum install rub ...

  5. redis数据迁移操作

    redis客户端连接命令,分别连接旧环境中的主从redis Src目录下./redis-cli -h IP -p PORT 使用info replication 命令找出主redis使用客户端命令连接 ...

  6. python 操作redis数据

    python 操作redis 各种类型的数据 # encoding:utf-8 import redis import time def main(): """ redi ...

  7. python操作redis数据

    一.环境安装 1.redispy安装 (automatic) C:\Users\Administrator>pip install redis 2.检测是否安装成功 (automatic) C: ...

  8. Redis数据迁移同步工具(redis-shake)

    前言 最近线上一台自建redis服务的服务器频繁报警,内存使用率有点高,这是一台配置比较简陋(2C8G)的机子了,近期也打算准备抛弃它了.抛弃之前需对原先的数据进行迁移,全量数据,增量数据都需要考虑, ...

  9. redis 数据迁移

    最近有个项目因为要搬迁服务器的原因,去找了服务器公司的运维,需要收费,于是果断决定自己实现这个功能.现在百度上已经一大把redis数据库迁移的教程,大部分是利用主从复制或者利用redis的RDB备份之 ...

随机推荐

  1. jQuery入门简述

    jQuery 是一套快速的,简洁的 javaScript 脚本库,jQuery 由美国人 John Resig 创建,至今已吸引了来自世界各地的众多 javaScript 高手加入其组织,使用户能更方 ...

  2. php实现命令行里输出带颜色文字

    今天执行composer的时候看到命令窗口出现的提示里面有的关键性部分带有颜色,于是很好奇研究了一下,在这里记录下来 其实在命令行输出带颜色字体主要是使用的 ANSI 转义字符实现的,我们先看个例子: ...

  3. css3 transform实现水平和垂直居中

    代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  4. S2-045、S2-046

    前言 S2-045依然是一个Ognl表达式注入导致的RCE漏洞,且漏洞很严重.另外,还是建议读者阅读本篇文章前先看下系列文章的第一篇. 正文 依然是第一篇文章中讲过,StrutsPrepareFilt ...

  5. 字符串转json数组

    import net.sf.json.JSONArray;import net.sf.json.JSONObject; String content = inBankOdd.getContent(). ...

  6. Image Processing and Analysis_21_Scale Space:Scale-space theory A basic tool for analysing structures at different scales——1994

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  7. 判断一个ip地址是动态的还是静态的

    要确定计算机的IP是静态IP还是动态IP,请执行以下步骤: 通过单击开始打开命令提示符并搜索CMD,然后单击cmd.exe 键入ipconfig / all.  找到“以太网本地连接”列表.找到“ I ...

  8. [Python] For 嵌套循环打印图形 nested loop-练习题答案

    前一篇:[Python] For 嵌套循环打印图形 nested loop-练习题 [python的for循环嵌套打印如下图形] 图形一: 输出结果: ******* ******* ******* ...

  9. Struts2 Action类的创建以及参数传递以及接收

    一.Struts中Action得创建方式 1,直接创建一个简单的Action类 添加Struts.xml,配置转发方法返回转发的页面. 2,实现一个Action类 Strust.xml配置对应的Url ...

  10. 通过字节码分析Java方法的静态分派与动态分派机制

    在上一次[https://www.cnblogs.com/webor2006/p/9723289.html]中已经对Java方法的静态分派在字节码中的表现了,也就是方法重载其实是一种静态分派的体现,这 ...