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备份之 ...
随机推荐
- 【shell脚本】$ 在shell脚本中的使用
shell脚本中 '$' 与不同的符号搭配其表示的意义也会不同 特殊标志符 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数. 例如,第一个参数是$1,第二个 ...
- menustrip选项怎么设置竖向分割线
效果图: 解决方案: 选中一个项--[右键]--[插入]--[separator]
- mac使用sourcetree跳过注册
转自https://blog.csdn.net/qq_32890891/article/details/89216954 打开sourcetree 关闭sourcetree 命令终端输入default ...
- 禁止html页面返回上一层
两种方式: // 方式一 触发返回上一层页面事件,只会重新加载当前页面 window.addEventListener('pageshow', function(e) { if (e.persiste ...
- 解决Centos /boot过小无法更新内核
Centos7默认安装时,/boot目录设置只有150M左右,这样编译几个版本的内核/boot空间就不够用了.报错大致如下: Disk Requirements: At least 3MB more ...
- 0011SpringBoot的@EnableWebMvc全面接管SpringMVC的自动配置(源码)
所谓的@EnableWebMvc全面接管SpringMVC的自动配置,是指@EnableWebMvc注解会使SpringMVC的自动配置失效,原理如下: 1.查看@EnableWebMvc的源码,如下 ...
- JAVA遇见HTML——JSP篇(JSP指令与动作元素)
- Nginx HTTP服务器配置模板
https://github.com/h5bp/server-configs-nginx
- Python+request 将获取的url和接口响应时间(timeout)写入到Excel中《八》
使用场景: 在工作中,常见某个功能的查询,当查询关联表特别多时,开发写的SQL语句等等问题导致响应时间较慢,那么作为测试需要将每个接口的响应时间进行测试,对同个接口多次执行,并将测试结果写入到exce ...
- mali --mobile platform GPU arch about vertex pipeline
顶点这边 我看powerVR也就是说苹果也是如此 还有mali 目前看这俩平台的顶点数据都有这样一步优化 一个render pass的所有顶点shade的时候 先算pos 用这个结果拿最上一层顶点数据 ...