redis-copy使用6379端口无法连接到Redis服务器的问题

 更新时间:2023年05月16日 08:20:45   作者:路边两盏灯  
这篇文章主要介绍了redis-copy使用6379端口无法连接到Redis服务器的问题的相关资料,需要的朋友可以参考下

问题描述

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

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

到此这篇关于redis-copy使用6379端口无法连接到Redis服务器的问题的文章就介绍到这了,更多相关redis-copy无法连接到Redis服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • easyswoole3.5 redis使用详细解析

    easyswoole3.5 redis使用详细解析

    这篇文章主要介绍了easyswoole3.5 redis使用的相关知识,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • Redis的数据复制过程详解

    Redis的数据复制过程详解

    Redis 的复制功能分为同步(sync)和命令传播(command propagate)这两个操作,这篇文章主要介绍了Redis的数据复制,需要的朋友可以参考下
    2022-12-12
  • Redis GEO实现搜索附近用户的项目实践

    Redis GEO实现搜索附近用户的项目实践

    RedisGEO主要用于存储地理位置信息,并对存储的信息进行操作,本文主要介绍了Redis GEO实现搜索附近用户的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • CentOS系统下Redis安装和自启动配置的步骤

    CentOS系统下Redis安装和自启动配置的步骤

    相信大家都知道Redis是一个C实现的基于内存、可持久化的键值对数据库,在分布式服务中常作为缓存服务。所以这篇文章将详细介绍在CentOS系统下如何从零开始安装到配置启动服务。有需要的可以参考借鉴。
    2016-09-09
  • 深入理解Redis 内存管理

    深入理解Redis 内存管理

    本文主要介绍了深入理解Redis 内存管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 微服务Spring Boot 整合 Redis 实现好友关注功能

    微服务Spring Boot 整合 Redis 实现好友关注功能

    这篇文章主要介绍了微服务Spring Boot 整合 Redis 实现 好友关注,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • 使用百度地图api通过redis实现地标存储及范围坐标点查询功能

    使用百度地图api通过redis实现地标存储及范围坐标点查询功能

    这篇文章主要介绍了使用百度地图api通过redis实现地标存储及范围坐标点查询功能,本文通过图文实例代码相结合给大家介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • 分布式利器redis及redisson的延迟队列实践

    分布式利器redis及redisson的延迟队列实践

    这篇文章为大家主要介绍了分布式利器redis及redisson的延迟队列实践,搜遍全网好像还没有使用redisson的延迟队列的,redisson作为一个分布式利器,这么好用的工具没人用有点可惜
    2022-03-03
  • Redis中Redisson布隆过滤器的学习

    Redis中Redisson布隆过滤器的学习

    布隆过滤器是一个非常长的二进制向量和一系列随机哈希函数的组合,可用于检索一个元素是否存在,本文就详细的介绍一下Redisson布隆过滤器,具有一定的参考价值,感兴趣的可以了解一下
    2022-05-05
  • Redis数据结构之链表详解

    Redis数据结构之链表详解

    大家好,本篇文章主要讲的是Redis数据结构之链表详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12

最新评论