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. CSS伸缩布局

    1. 伸缩布局应用: 伸缩布局应用 主轴: Flex容器的主轴用来配置Flex项目,默认是水平方向 侧轴: 与主轴垂直的轴称为侧轴,默认还是垂直方向 方向: 默认是主轴从左向右, 侧轴默认是从上到下 ...

  2. 【导出导入】IMPDP table_exists_action 参数的应用

    转自:https://yq.aliyun.com/articles/29337 当使用IMPDP完成数据库导入时,如遇到表已存在时,Oracle提供给我们如下四种处理方式:a.忽略(SKIP,默认行为 ...

  3. C和指针--高级声明

    1. int *f(); 分析:必须确定表达式*f()是如何进行求值的.首先执行的是函数调用操作符(),因为它的优先级高于间接访问操作符.因此,f是一个函数,它的返回值类型是一个指向整型的指针. 2. ...

  4. KVM虚拟机高级设置——08 管理远程虚拟机

    在搭建KVM环境——07 带GUI的Linux上安装KVM图形界面管理工具介绍了KVM图形化管理工具,这款工具除了可以管理本地KVM虚拟外,还可以管理远程KVM虚拟机. 输入113机器密码 输入yes ...

  5. Python内存数据序列化到硬盘上哪家强

    1. 闲扯一下:文件 磁盘上的数据,我们一般称为 “文件” ,一般不同的文件都有各自的后缀名,比如 .txt .docx .xlsx .jpg .mp3 .avi .这些不同类型的文件一般分为两大类: ...

  6. 用js刷剑指offer(二叉树的镜像)

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...

  7. 爬虫部署 --- scrapyd部署爬虫 + Gerapy 管理界面 scrapyd+gerapy部署流程

    ---------scrapyd部署爬虫---------------1.编写爬虫2.部署环境pip install scrapyd pip install scrapyd-client 启动scra ...

  8. python+Appium自动化:日志logging模块

    日志级别 debug.info.warn.error.critical五个级别 logging模块构成(四部分) logger(记录器,用于日志采集) Handler(处理器,将日志记录发送到合适的路 ...

  9. Entity Framework二、 模型优先 ,ObjectContext类

    https://www.cnblogs.com/ejiyuan/archive/2009/05/27/1490786.html 1.ObjectContext 封装.NET Framework和数据库 ...

  10. 如何解决web大流量,高并发问题

    对于当今大流量的网站,每天几千万甚至上亿的流量,是如何解决访问量问题的呢? 以下是一些总结的方法:  第一,确认服务器硬件是否足够支持当前的流量.  普通的P4服务器一般最多能支持每天10万独立IP, ...