Python进行Redis数据迁移
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数据迁移的更多相关文章
- Redis 数据迁移 & 数据审计
Redis 数据迁移 安装迁移工具 # 安装依赖 [root@dbtest03 ~]# yum install -y automake libtool autoconf bzip2 git # 拉取工 ...
- Redis数据迁移方案
场景 Redis实例A ---> Redis实例B,整库全量迁移 方案一: mac环境 brew install npm npm install redis-dump -g 针对RedisA: ...
- 使用rdb文件进行redis数据迁移--python脚本
查找了一些redis迁移的方法,一般做法就是 1. 从源数据库把rdb文件保存,然后传到新的主机上,启动新的redis即可 2. 把新的redis当做源数据库的slave,同步数据 今天开发提了一个测 ...
- redis数据迁移
redis的备份和还原,借助了第三方的工具---redis-dump, redis中使用redis-dump导出.导入.还原数据实例 1.安装redis-dump # yum install rub ...
- redis数据迁移操作
redis客户端连接命令,分别连接旧环境中的主从redis Src目录下./redis-cli -h IP -p PORT 使用info replication 命令找出主redis使用客户端命令连接 ...
- python 操作redis数据
python 操作redis 各种类型的数据 # encoding:utf-8 import redis import time def main(): """ redi ...
- python操作redis数据
一.环境安装 1.redispy安装 (automatic) C:\Users\Administrator>pip install redis 2.检测是否安装成功 (automatic) C: ...
- Redis数据迁移同步工具(redis-shake)
前言 最近线上一台自建redis服务的服务器频繁报警,内存使用率有点高,这是一台配置比较简陋(2C8G)的机子了,近期也打算准备抛弃它了.抛弃之前需对原先的数据进行迁移,全量数据,增量数据都需要考虑, ...
- redis 数据迁移
最近有个项目因为要搬迁服务器的原因,去找了服务器公司的运维,需要收费,于是果断决定自己实现这个功能.现在百度上已经一大把redis数据库迁移的教程,大部分是利用主从复制或者利用redis的RDB备份之 ...
随机推荐
- Android开发之图像处理那点事——滤镜
在Android开发中,一般对图像的处理就是Bitmap(位图),它包含了图像的全部数据,即点阵和颜色值,点阵就是包含像素点的矩阵,而颜色值就是ARGB,分别代表透明.红色.绿色.蓝色通道,它们共同决 ...
- extern c 解释
extern "C"修饰的变量和函数是按照c的方式编译的 如果想用c++方式编译c代码,需要特殊标识 方法 #if defined(__cplusplus) || defined( ...
- leetcode-64. 最小路径和 · vector + DP
题面 Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right wh ...
- keil 选项卡设置
*1.optimization : level2. *2. 2)硬件目标设置选项卡(Target),见图6所示. 图6 1:选择硬件目标设置选项卡 2:指定用于的晶振频率 3:在应用中可以选择实时操 ...
- FreeRTOS编程风格
数据类型 基本使用的是标准C里面的数据类型,但是针对不同的处理器,对标准C的数据类型又进行了重定义: 在FreeRTOS中详细的数据类型重定义在portmacro.h这个文件中,具体如下: /* Ty ...
- 关于阿里云OSS上传图片之后会被旋转90度的解决办法
原文:https://www.cnblogs.com/wuhjbk/p/10133596.html 问题描述:正常的图片前端上传到oss成功之后的资源地址.在html上引用的时候被旋转了90度oss资 ...
- sql 发生死锁
SELECT request_session_id spid , OBJECT_NAME(resource_associated_entity_id) tableName FROM sys.dm_tr ...
- Window脚本学习笔记之BAT调用设置
用一句bat脚本调用window的系统设置: rem 调用回收站 explorer.exe ::{645FF040-5081-101B-9F08-00AA002F954E} rem 检查Windows ...
- Java字节码文件结构剖析
今天起开启JVM的新的知识学习篇章----Java的字节码,那学习Java字节码有啥用呢?我们知道Java是跨平台的一门语言,编写一次到处运行,而支撑着这个特性的根基为两点:JVM和.class字节码 ...
- jQuery获取select元素选择器练习
jQuery获取Select选择的Text和Value:语法解释: 1. $("#select_id").change(function(){//code...}); //为Sel ...