Redis 数据迁移的项目实践

 更新时间:2023年09月16日 09:33:50   作者:weixin_44566795  
本文主要介绍了Redis 数据迁移的项目实践,通过Redis-shake的sync(同步)模式,可以将Redis的数据实时迁移至另一套Redis环境,具有一定的参考价值,感兴趣的可以了解一下

redis迁移

通过Redis-shake的sync(同步)模式,可以将Redis的数据实时迁移至另一套Redis环境。

前提条件: Redis的版本为2.8、3.0、3.2、4.0或5.0版本。

redis-shake 介绍

  • redis-shake是阿里云用于Redis数据传输与过滤的开源工具,该工具易于部署,灵活高效。
  • redis-shake的Sync(同步)模式支持全量数据迁移和增量数据迁移;
  • Restore(恢复)模式支持将本地RDB文件中的数据恢复至目标端;
  • Scan模式是使用SCAN命令来获取源端Redis中的Key,然后使用DUMP命令获取Key的值,最终使用RESTORE命令将Key(与其值)恢复至目标端。

不同模式的同步流程如下图所示:

在这里插入图片描述

注意事项:

  • 如果目标库的数据逐出策略(maxmemory-policy)配置为除noeviction以外的值,可能导致目标库的数据与源库不一致。关于数据逐出策略详情,请参见Redis数据逐出策略
  • 如果源库中的部分Key使用了过期(Expire)机制,由于可能存在Key已过期但未被及时删除的情形,在目标库中查看(如通过info命令)的Key数量会比源库的Key数量少。

redis-shake 3.X 版本测试

redis-shake 3.X 下载

wget 'https://github.com/alibaba/RedisShake/releases/download/v3.1.7/redis-shake-linux-amd64.tar.gz'

redis-shake 3.X 解压

mkdir redis-shake
tar zxvf redis-shake-linux-amd64.tar.gz -C redis-shake

redis-shake 3.X 配置

我们使用redis-shake中sync模式,以下配置已sync配置为例

type = "sync"
[source]
version = 2.8 # redis version, such as 2.8, 4.0, 5.0, 6.0, 6.2, 7.0, ...
address = "x.x.x.x:6379"
username = "" # keep empty if not using ACL
password = "xxxxxxx" # keep empty if no authentication is required
tls = false
elasticache_psync = "" # using when source is ElastiCache. ref: https://github.com/alibaba/RedisShake/issues/373
[target]
type = "standalone" # "standalone" or "cluster"
version = 2.8 # redis version, such as 2.8, 4.0, 5.0, 6.0, 6.2, 7.0, ...
 # When the target is a cluster, write the address of one of the nodes.
 # redis-shake will obtain other nodes through the `cluster nodes` command.
address = "x.x.x.x:6379"
username = "" # keep empty if not using ACL
password = "xxxxxxx" # keep empty if no authentication is required
tls = false
[advanced]
dir = "data"
ncpu = 4 # runtime.GOMAXPROCS, 0 means use runtime.NumCPU() cpu cores
pprof_port = 0 # pprof port, 0 means disable
metrics_port = 0 # metric port, 0 means disable
log_file = "redis-shake.log"
log_level = "info" # debug, info or warn
log_interval = 5 # in seconds
rdb_restore_command_behavior = "skip" # panic, rewrite or skip
pipeline_count_limit = 1024 # pipeline
target_redis_client_max_querybuf_len = 1024_000_000
target_redis_proto_max_bulk_len = 512_000_000

redis-shake 3.X 启动

./redis-shake sync.toml

在这里插入图片描述

日志字段说明:

  • allowOps:表示每秒向目标库发送多少条命令
  • disallowOps:表示每秒过滤的命令数。
  • entryId:从1开始计数,表示redis-shake共处理多少条命令。
  • InQueueEntriesCount:表示还剩余多少条命令待发送。

Redis数据逐出策略

volatile-lru 按照LRU算法逐出原有数据,但仅逐出设置了过期时间的数据。

volatile-ttl 仅逐出设置了过期时间的数据,并且是按照TTL由小到大的顺序进行逐出。

allkeys-lru 按照LRU算法逐出原有数据。

volatile-random 随机逐出原有数据,但仅逐出设置了过期时间的数据。

allkeys-random 随机逐出原有数据。

noeviction 不逐出任何数据,当内存已满时新数据的写入会得到一个错误信息(DEL和某些其他的命令除外)。

volatile-lfu 按照LFU算法逐出原有数据,只从设置了过期时间的key中选择最不常用的key进行删除。

allkeys-lfu 按照LFU算法优先逐出最不常用的key。

reids-shake 2.X 版本测试

reids-shake 2.X 下载

wget 'http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/120287/cn_zh/1608173646665/redis-shake-v2.0.3.tar.gz'

reids-shake 2.X 解压

tar xzf redis-shake-v2.0.3.tar.gz

reids-shake 2.X 配置

conf.version = 1   #当前配置文件版本号,请不要修改
id = redis-shake
log.file =         #指定日志文件,不指定将打印到stdout
log.level = info
pid_path =         #指定pid路径,不指定默认/var/run
system_profile = 9310
http_profile = 9320 # metric端口号 -1表示不启用
parallel = 32       #启动多少个并发线程同步一个RDB文件,默认32
source.type = sentinel #支持standalone,sentinel,cluster和proxy四种模式
source.address = sourcemaster:master@x.x.x.x:26379
source.password_raw = XXXXXXXXXXXXXXXXXXX
source.auth_type = auth
source.tls_enable = false
source.rdb.input = local
source.rdb.parallel = 0
source.rdb.special_cloud =
target.type = sentinel
target.address = targetmaster:master@x.x.x.x:26379
target.password_raw = XXXXXXXXXXXXXXXXXXX
target.auth_type = auth
target.db = -1
target.tls_enable = false
target.rdb.output = local_dump
target.version = 2.8   #目标redis版本
fake_time =            #处理过期的键值,当迁移两端不一致,目的端需要加上这个值
key_exists = ignore    #当源目的有重复的key,支持rewrite(覆盖目的端key)、none(进程直接退出)、ignore(保留目的端key,忽略源端key)
filter.db.whitelist = 5;9 #指定通过的db 该配置db5、db9通过其他忽略
filter.db.blacklist =     #指定过滤的db
filter.key.whitelist =    #指定特定前缀的key通过
filter.key.blacklist =    #指定特定前缀的key过滤
filter.slot =
filter.lua = false
big_key_threshold = 524288000 #key不大直接调用restore写入目的端,如果key对应的value字节超过定制那么分批次一个一个写入,如果目的端是Codis 该参数需要置1,目的端大版本小于源端,建议置1.
metric = true
metric.print_log = false
sender.size = 104857600 #发送缓存的字节长度,超过这个阈值将会强行刷缓存发送
sender.count = 4095   #发送缓存的报文个数,超过这个阈值将会强行刷缓存发送
sender.delay_channel_size = 65535 # 用于metric统计时延的队列
keep_alive = 0    # TCP keep-alive保活参数,单位秒,0表示不启用。
scan.key_number = 50  # 每次scan的个数,不配置则默认100.
scan.special_cloud = #有些版本具有特殊格式目前支持腾讯云的集群版"tencent_cluster"、阿里云的集群版"aliyun_cluster",主从版本不需要,只针对集群版。
scan.key_file = #有些云版本,不支持sync/psync,也不支持scan,我们支持从文件中进行读取所有key列表并进行抓取:一行一个key。
qps = 200000 #每秒传输key的个数
resume_from_break_point = false #断点续传
replace_hash_tag = false

reids-shake 2.X 启动

 ./redis-shake.linux -type=sync -conf=redis-shake.conf

在这里插入图片描述

字段说明:

  • forwardCommands:源库发送过来的命令数。
  • filterCommands:被过滤的命令数,例如在Redis-shake配置文件中设置了过滤某些库。
  • writeBytes:源库发送过来的字节数。

到此这篇关于Redis 数据迁移的项目实践的文章就介绍到这了,更多相关Redis 数据迁移内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Redis进行数据缓存的项目实践

    利用Redis进行数据缓存的项目实践

    在实际的业务场景中,Redis 一般和其他数据库搭配使用,用来减轻后端数据库的压力,本文就介绍了利用Redis进行数据缓存的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2022-06-06
  • 使用Redis实现实时排行榜功能

    使用Redis实现实时排行榜功能

    排行榜功能是一个很普遍的需求。使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择。接下来通过本文给大家介绍使用Redis实现实时排行榜功能,需要的朋友可以参考下
    2021-07-07
  • Redis接口访问优化的方法步骤

    Redis接口访问优化的方法步骤

    本文基于之前的Redis接口访问进行优化,引入了接口防抖功能,通过时间段参数限制接口调用频率,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • redis lua脚本解决高并发下秒杀场景

    redis lua脚本解决高并发下秒杀场景

    这篇文章主要为大家介绍了redis lua脚本解决高并发下秒杀场景,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • windows环境下Redis+Spring缓存实例讲解

    windows环境下Redis+Spring缓存实例讲解

    这篇文章主要为大家详细介绍了windows环境下Redis+Spring缓存实例教程,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Windows环境下查看、添加、修改redis数据库的密码两种方式

    Windows环境下查看、添加、修改redis数据库的密码两种方式

    在Windows系统上设置Redis密码的过程与Linux系统类似,但需注意几个关键步骤以确保正确配置,这篇文章主要给大家介绍了关于Windows环境下查看、添加、修改redis数据库的密码两种方式,需要的朋友可以参考下
    2024-07-07
  • Redis中 HyperLogLog数据类型使用小结

    Redis中 HyperLogLog数据类型使用小结

    Redis使用HyperLogLog的主要作用是在大数据流(view,IP,城市)的情况下进行去重计数,这篇文章主要介绍了Redis中 HyperLogLog数据类型使用总结,需要的朋友可以参考下
    2023-03-03
  • Redis数据库的应用场景介绍

    Redis数据库的应用场景介绍

    这篇文章主要介绍了Redis数据库的应用场景介绍,本文讲解了MySql+Memcached架构的问题、Redis常用数据类型、Redis数据类型应用和实现方式、Redis实际应用场景等内容,需要的朋友可以参考下
    2015-06-06
  • Redis 集群模式(Cluster)原理详解

    Redis 集群模式(Cluster)原理详解

    redis cluster集群是一个由多个主从节点集群组成的分布式服务集群,它具有复制、高可用和分片特性,cluster集群不需要sentinel 哨兵也能完成节点移除和故障转移的功能,本文就详细的给大家介绍一下Redis 集群模式原理,感兴趣的朋友跟着小编一起来看看吧
    2023-07-07
  • Redis List列表相关命令的用法详解

    Redis List列表相关命令的用法详解

    这篇文章主要为大家详细介绍了Redis中List列表相关命令的用法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10

最新评论