批量迁移redis实例的key

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,经济版 1GB 1个月
简介: 批量迁移redis实例的key

我们知道migrate 命令可以迁移redis的多个key,但是如果redis的key有非常多,那用起来就很不方便了。

所以下面分享一个脚本来实现批量key的迁移,主要使用的命令为dumprestore

脚本如下:

#!/bin/bash
redis-cli -h host1 -p 63791 -n 0 keys "*" | while read key
do
redis-cli -h host1 -p 63791 -n 0 --raw dump $key | perl -pe 'chomp if eof' | redis-cli -h host2 -p 6379 -n 0 -x restore $key 0
echo "migrate key $key"
done

脚本具体解析:

  • 使用redis-cli连接到host1服务器,n代表database,执行keys "*"命令获取所有键名。
  • 使用while read key循环读取每个键名。
  • 对于每个键名,使用redis-cli连接到host1服务器,执行dump命令将键值序列化输出。
  • 使用perl -pe 'chomp if eof’命令处理输出结果,去除换行符。
  • 使用redis-cli连接到host2服务器,执行restore命令将键值恢复到host2服务器,ttl=0代表永不过期。
  • 输出迁移的键名。

测试:

1、我在本地模拟了两个redis实例。ip都为127.0.0.1,端口一个是默认的6379,一个是63791

并且分别set了不同的key

127.0.0.1:63791> keys *
1) "age"
2) "like"
3) "colour"
127.0.0.1:6379> keys *
1) "student"

2、使用脚本批量将63791实例的key迁移到6379实例

我的脚本如下:

#!/bin/bash
redis-cli -h 127.0.0.1 -p 63791 -n 0 keys "*" | while read key
do
redis-cli -h 127.0.0.1 -p 63791 -n 0 --raw dump $key | perl -pe 'chomp if eof' | redis-cli -h 127.0.0.1 -p 6379 -n 0 -x restore $key 0
echo "migrate key $key"
done

执行sh migrate.sh启动脚本

jiagangdeMacBook-Pro jag-ide-dev/redis » sh migrate.sh
OK
migrate key age
OK
migrate key like
OK
migrate key colour

查看6379实例

可以看到63791实例上的数据已经被迁移了过来

127.0.0.1:6379> keys *
1) "like"
2) "age"
3) "student"
4) "colour"
127.0.0.1:6379> get colour
"red"


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
18天前
|
NoSQL 关系型数据库 Redis
Docker的通俗理解和通过宿主机端口访问Redis容器的实例
本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。 关键点: - Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。 - `docker pull` 拉取镜像,如 `redis:3.0`。 - `docker run -d --name` 后台运行容器,如 `my-redis`。 - `-p` 参数做端口映射,如 `6379:6379`。 - `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。
|
6天前
|
存储 NoSQL 安全
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
15 1
|
10天前
|
NoSQL Redis
蓝易云 - redis报错WRONGTYPE Operation against a key holding the wrong kind of value
解决这个问题的方法是检查你的代码,确保你对每个键使用的命令与该键的类型匹配。你可以使用 `TYPE`命令来确定一个键的类型。例如,`TYPE mykey`将返回 `mykey`的类型。
21 3
|
15天前
|
消息中间件 弹性计算 缓存
通过OOS定时升级Redis实例临时带宽
阿里云OOS提供了定时升级Redis实例临时带宽的功能,以应对数据驱动业务中的流量高峰。这个功能允许用户根据预测的业务负载,在特定日期和时间自动增加Redis实例的带宽,确保服务性能和稳定性。在高流量事件结束后,带宽会自动恢复到原设置,节省成本。 此功能适用于电商平台促销、大型游戏更新等场景,确保在流量高峰期间的系统稳定运行。
89 3
|
19天前
|
NoSQL Redis 存储
Redis大key问题 - 优化、清理
【6月更文挑战第14天】Redis内置命令如STRLEN、LLEN等用于检测不同类型Key的大小。避免使用DEBUG OBJECT和MEMORY USAGE因高资源消耗。大Key优化包括业务设计避免大Key、数据拆分、更换存储方案、数据压缩和合理清理。清理大Key应选低峰期或分批异步进行,以减少阻塞。使用如HSCAN、SREM等命令避免一次性操作大量数据。
20 1
|
20天前
|
NoSQL Redis 容器
Redis大Key问题 - 标准、原因、查找
【6月更文挑战第13天】**大Key标准**在不同场景各异,一般string超1MB或容器超10k元素视为大;高并发场景中,string超10KB,容器超5k或整体10MB。**阿里云Redis**中,大Key可能表现为String值5MB,ZSET成员10k,或Hash总值100MB。**大Key影响**包括高读取成本、操作阻塞、存储压力不均。**产生原因**多源于业务设计、动态增长管理和程序错误。**查找大Key**可通过云服务的实时/离线统计,`redis-cli --bigkeys`或使用Redis RDB Tools分析RDB文件。注意,某些特定需求可能需额外工具。
22 1
|
29天前
|
存储 NoSQL 安全
Redis第六弹-List列表-(相当于数组/顺序表)Lpush key element-一次可以插入多个元素(假如key已经存在,并且key对应的value并非是list,则会报错)
Redis第六弹-List列表-(相当于数组/顺序表)Lpush key element-一次可以插入多个元素(假如key已经存在,并且key对应的value并非是list,则会报错)
|
15天前
|
存储 缓存 运维
Redis的热Key问题
【6月更文挑战第18天】Redis中的热Key是高访问频率的Key,如QPS高、大带宽使用或CPU密集型操作。热Key可能导致CPU占用过高、访问倾斜、缓存击穿和系统性能下降。爆款商品、热点事件等可引发热Key。检测热Key可借助云服务、`redis-cli hotkeys`、业务层监控或`MONITOR`命令。优化策略包括复制热Key到多分片、采用读写分离,但需权衡代码复杂性和数据一致性。
22 0
|
15天前
|
存储 NoSQL Redis
redis大key对持久化的影响
redis大key对持久化的影响
19 0
|
29天前
|
NoSQL 关系型数据库 MySQL
Redis进阶-select 1. /xxx 切换数据库DBSIZE- 获取当前数据库中的key的个数flushdb-删除当前数据的所有keyflushall-删除所有表的所有库Re
Redis进阶-select 1. /xxx 切换数据库DBSIZE- 获取当前数据库中的key的个数flushdb-删除当前数据的所有keyflushall-删除所有表的所有库Re