问题描述

当使用Azure Redis服务时,需要把一个Redis服务的数据导入到另一个Redis上,因为Redis服务没有使用高级版,所以不支持直接导入/导出RDB文件。

以编程方式来读取数据并写入到新的Redis服务端,使用开源工具 Redis-Copy 却遇见了 6379 端口无法连接的问题。而用 redis-cli.exe 却正常连接。

redis-copy 工具使用 6379 端口

redis-copy.exe

--se xxxxx.redis.cache.chinacloudapi.cn --sa <your source password> --sp 6379 --sssl false

--de xxxxx.redis.cache.chinacloudapi.cn --da <your destination password> --dp 6379 --dssl false

报错:

  • UnableToConnect on xxxxxxxx.redis.cache.chinacloudapi.cn:6379/Interactive
  • No connection is available to service this operation
  • It was not possible to connect to the redis server.

Redis-cli.exe 工具使用 6379 端口,正常连接

redis-cli.exe -h yourcachename.redis.cache.chinacloudapi.cn -p 6379 -a YourAccessKey

那么,这是什么情况呢?如何才能正确使用 redis-copy.exe 工具呢?

问题解答

根据 redis-cli.exe 工具的验证,Redis服务器的 6379端口在同一个客户端机器上,是可以正常连接的。那么问题就需要转移到 redis-copy.exe 的这个开源工具上来研究了。

第一步:去 github 上下载 redis-copy的源码:https://github.com/deepakverma/redis-copy

第二步:本地Visual Studio 工具打开后,把启动指令后面携带的参数填入Debug Start options中

第三步:调试代码,发现问题根源是SSL的参数值依旧为True,而端口为 6379。 用SSL的方式去链接非SSL端口,这就是问题的根源。

问题出现在 CommandLine.Parser.Default.ParseArguments<Options>(args) 这句代码上,经过反复实现,发现CommandLine在转换 bool 类型的时候,只要携带了这个参数,不管内容是什么,都会被转换为 true

第四步:解决办法

最快的解决办法 ---- 使用6380端口连接

redis-copy.exe

 --se xxxxx.redis.cache.chinacloudapi.cn --sa <your source password> --sp 6380  

 --de xxxxx.redis.cache.chinacloudapi.cn --da <your destination password>  --dp 6380 

修改Redis-Copy源码 ---- 解决SSL赋值问题

[主要]方案一:在Options.cs 文件中,修改 SourceSSL 和 DestinationSSL 的默认值为False。当需要使用6380端口连接时,携带 --sssl , --dssl参数

        [Option("sssl", Required = false, Default = false, HelpText = "Connect Source over ssl" )]
public bool SourceSSL { get; set; } ... ... [Option("dssl", Required = false, Default = false, HelpText = "Destination Source over ssl" )]
public bool DestinationSSL { get; set; }

修改代码,重新编译exe文件后。

使用6379端口的命令为: redis-copy.exe  --se xxxx --sa **** --sp 6379  --de xxxx --da **** --dp 6379

使用6380端口的命令为: redis-copy.exe  --se xxxx --sa **** --sp 6380 --sssl true  --de xxxx --da **** --dp 6380 --dssl true

[其他]方案二:在Options.cs 文件中,修改 SourceSSL 和 DestinationSSL 的类型为String,然后再初始化Redis连接字符串的时候转换为bool类型。

        [Option("sssl", Required = false, Default = true, HelpText = "Connect Source over ssl" )]
public string SourceSSL { get; set; } ... ... [Option("dssl", Required = false, Default = true, HelpText = "Destination Source over ssl" )]
public string DestinationSSL { get; set; } .... .... ConfigurationOptions configsource = new ConfigurationOptions();
configsource.Ssl =Convert.ToBoolean(options.SourceSSL);
configsource.Password = options.SourcePassword;
configsource.AllowAdmin = true;
configsource.SyncTimeout = 60000; // increasing timeout for source for SCAN command
sourcecon = GetConnectionMultiplexer(options.SourceEndpoint, options.SourcePort, configsource); ... ... ConfigurationOptions configdestination = new ConfigurationOptions();
configdestination.Ssl = Convert.ToBoolean(options.DestinationSSL);
configdestination.Password = options.DestinationPassword;
configdestination.AllowAdmin = true;
destcon = GetConnectionMultiplexer(options.DestinationEndpoint, options.DestinationPort, configdestination);

参考资料

以编程方式迁移 : https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-migration-guide#migrate-programmatically

使用 Redis 命令行工具进行连接: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-redis-cli-tool#connect-using-the-redis-command-line-tool

redis-copy : https://github.com/deepakverma/redis-copy

 
 
 

【Azure Redis 缓存】使用开源工具redis-copy时遇见6379端口无法连接到Redis服务器的问题的更多相关文章

  1. 【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果

    当使用Azure Redis高级版时候,为了能更好的保护Redis的安全,启用了虚拟网路,把Redis集成在Azure中的虚拟网络,只能通过虚拟网络VENT中的资源进行访问,而公网是不可以访问的.但是 ...

  2. 【Azure Redis 缓存】Linux虚拟机中使用6380端口(SSL方式)连接Azure Redis (redis-cli & stunnel)

    问题描述 在Azure Redis的官方文档中,介绍了在Windows下,如何通过redis-cli.exe连接Redis, 包含如何配置stunnel使得通过 6380,SSL方式连接到Redis ...

  3. Windows Azure Redis 缓存服务

    8月20日,Windows Azure (中国版)开始提供Redis缓存服务,比较国际版的Microsoft Azure晚了差不多一年的时间.说实话,微软真不应该将这个重要的功能delay这么长时间, ...

  4. 【Azure Redis 缓存】由Azure Redis是否可以自定义密码而引申出Azure PaaS的Redis服务是否可以和自建的Redis进行主从配置呢?

    问题描述 在自建的Redis服务中,可以通过 config set requirepass <Password> 设置Redis的登录密码,然后使用auth 命令输入密码.操作命令如下: ...

  5. Redis缓存相关问题总结

    使用缓存是系统性能优化的第一黄金法则. 缓存的设计和使用对一个系统的性能至关重要,平时接触到项目无论多少也都会在某些层面用到缓存,比如用HashMap实现,Ehcache,memcached.redi ...

  6. Redis缓存的设计、性能、应用与数据集群同步

    Redis缓存的设计.性能.应用与数据集群同步 http://youzhixueyuan.com/design-performance-and-application-of-redis-cache.h ...

  7. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第七天】(redis缓存)

    https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...

  8. SpringBoot集成Redis分布式锁以及Redis缓存

    https://blog.csdn.net/qq_26525215/article/details/79182687 集成Redis 首先在pom.xml中加入需要的redis依赖和缓存依赖 < ...

  9. 小白的springboot之路(八)、继承Redis以及@Cacheable注解实现Redis缓存

    0.前言 在项目中,缓存作为一种高效的提升性能的手段,几乎必不可少,Redis作为其中的佼佼者被广泛应用: 一.spring boot集成Redis 1.添加依赖 <dependency> ...

  10. Redis 缓存失效机制

    Redis缓存失效的故事要从EXPIRE这个命令说起,EXPIRE允许用户为某个key指定超时时间,当超过这个时间之后key对应的值会被清除,这篇文章主要在分析Redis源码的基础上站在Redis设计 ...

随机推荐

  1. 基于Quartz.Net通过反射进行任务调度

    通过反射加载任务调度 需求: 因为有些任务需要进行各种定时操作,因此将 Quartz.Net 简单封装了一下使用: 希望通过上传 dll 来进行每个任务的调度,所以写了个反射调度示例: Program ...

  2. Linux邮件mail.rc配置,发件服务配置

    Linux邮件mail.rc配置 前提条件 邮箱需要开启smtp功能 关闭selinux和防火墙 1.  安装mailx yum install -y mailx 2.  配置/etc/mail.rc ...

  3. flutter系列之:创建一个内嵌的navigation

    目录 简介 搭建主Navigator 构建子路由 总结 简介 我们在flutter中可以使用Navigator.push或者Navigator.pushNamed方法来向Navigator中添加不同的 ...

  4. easy-poi 一对多导出

    参考博客:https://blog.csdn.net/qq_31984879/article/details/102715335

  5. 基于声网 Flutter SDK 实现互动直播

    前言 互动直播是实现很多热门场景的基础,例如直播带货.秀场直播,还有类似抖音的直播 PK等.本文是由声网社区的开发者"小猿"撰写的Flutter基础教程系列中的第二篇,他将带着大家 ...

  6. Duplicate File Finder Pro - 重复文件查找器,给你的 Mac 清理出大量磁盘空间

    重复文件查找器 Duplicate File Finder Pro 是一个实用程序,只需3次点击就能在Mac上找到重复的文件.拖放功能和尽可能多的文件夹,你想,然后按下扫描按钮.在一分钟,应用程序将给 ...

  7. 一些随笔 No.1

    耦合 耦合是一个设计与逻辑上的问题 例如一个软件有20个功能,删除任意一个功能对别的19个功能不造成影响,就是低耦合 如果删除一个功能后其他功能会失去完整性,那么就是高耦合 Difference be ...

  8. [Java EE]缓存技术初探

    1 背景 使用场景:计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存. 高并发下,为提高 频繁 查询 大量 可能常用的 数据库数据的 查询效率. 大部分情况下, ...

  9. laravel实现大数据csv导出

    首先说明几点: excel格式的文件最大支持100万的数据,所以不考虑使用excel格式 laravel的toArray()方法有内存泄露,所以大量数据导出不能使用. 当然要使用chunk方法查询数据 ...

  10. 【Mybatis Plus】

    引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> ...