首页 > 数据库 >【Azure Redis 缓存】使用开源工具redis-copy时遇见6379端口无法连接到Redis服务器的问题

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

时间:2023-05-15 22:03:23浏览次数:51  
标签:exe -- Redis redis 6379 copy

问题描述

当使用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  

 

   

标签:exe,--,Redis,redis,6379,copy
From: https://www.cnblogs.com/lulight/p/17402815.html

相关文章

  • Redis数据结构二之SDS和双向链表
    本文首发于公众号:Hunter后端原文链接:Redis数据结构二之SDS和双向链表这一篇笔记介绍一下SDS(simpledynamicstring)和双向链表。以下是本篇笔记目录:SDS常数复杂度获取字符串长度杜绝缓冲区溢出减少修改字符串带来的内存重分配次数二进制安全兼容C字符串函数双向链......
  • Redis 持久化方式
    参考:小林coding https://xiaolincoding.com/redis/storage/aof.html#aof-%E9%87%8D%E5%86%99%E6%9C%BA%E5%88%B6https://www.cnblogs.com/lovezhr/p/15886823.html AOF(AppendOnlyFile)如果Redis 每执行一条写操作(不会记录读操作命令)命令,就把该命令 以追加的方式写入到......
  • Redis数据结构一之对象的介绍及各版本对应实现
    本文首发于公众号:Hunter后端原文链接:Redis数据结构一之对象的介绍及各版本对应实现本篇笔记开始介绍Redis数据结构的底层实现。当我们被问到Redis中有什么数据结构,或者说数据类型,我们可能会说有字符串、列表、哈希、集合、有序集合。其实这几种数据类型在Redis中都由......
  • redis 事务
    1.事务概述:1.1什么是事务:指可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序的串行化执行而不会被其他命令插入,不许加塞。即:一个队列中,一次性、顺序性、排他性的执行一系列命令。1.2与传统关系型数据库的事务相比redis事务的不同之处:我......
  • 04-面试必会-Redis篇
    01-你们项目中哪里用到了Redis?在我们的项目中很多地方都用到了Redis,Redis在我们的项目中主要有三个作用:使用Redis做热点数据缓存/接口数据缓存使用Redis存储一些业务数据,例如:验证码,用户信息,用户行为数据,数据计算结果,排行榜数据等使用Redis......
  • Redis基础命令汇总,看这篇就够了
    本文首发于公众号:Hunter后端原文链:Redis基础命令汇总,看这篇就够了本篇笔记将汇总Redis基础命令,包括几个常用的通用命令,和各个类型的数据的操作,包括字符串、哈希、列表、集合、有序集合等在内的基本操作。以下是本篇笔记目录:通用命令字符串命令哈希命令列表命令集合命......
  • redis学习
    目录1.redis常用的命令a>String命令b>Hash命令c>list命令D>Set命令E>Sotedset命令F>对value操作的命令(通用命令)2.redis在java中的连接a>配置commons-pool依赖b>配置yml文件连接redisc>自定义序列化redis的键值3.序列化器改进4.session改为Redisa>session模式b>Redis实现短信登陆(1)......
  • RedisInsight支持redis集群可视化
    RedisInsight是Redis官方出品的可视化管理工具,可用于设计、开发、优化你的Redis应用。支持深色和浅色两种主题,界面非常炫酷!可支持String、Hash、Set、List、JSON等多种数据类型的管理,同时支持远程使用CLI功能,功能非常强大!......
  • redis持久化之AOF
    1.什么是AOF:AOF(AppendOnlyFile):以日志的形式来记录每个写操作,将redis执行过的所有写指令记录下来(读操作不记录),只允许追加文件不允许改写文件,redis启动时会读取该文件重新构建数据。即:redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。但......
  • Docker 安装 Redis
    方法一、dockerpullredis:3.2查找DockerHub上的redis镜像runoob@runoob:~/redis$dockersearchredisNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDredisRedisisanopensource...2321[OK]sa......