RedisCluster 无法从给定参数开始

问题描述 投票:0回答:1

我有一个C++程序,我需要使用redis++库而不是hiredis。 我更改了连接以拥有一个 redisCluster 对象,我在构建容器中创建了一个集群,并且我有以下代码片段:

class DBClient
{
    public:
        DBClient(const Arguments &args): connection_options(), m_redis_client(connection_options) {
         
            m_redis_ip = args.getRedisIP();
            m_redis_port = std::stoi(args.getRedisPort());
          
        }
        ~DBClient();
 
    private:
        std::string  m_redis_ip;
        uint16_t     m_redis_port;
        sw::redis::ConnectionOptions connection_options;
        sw::redis::RedisCluster m_redis_client;
        
};

在cpp中我有以下内容 m_redis_client = sw::redis::RedisCluster(connection_options);

然后我尝试使用 UT 中的 m_redis_ip 和 m_redis_port 的给定参数调用 DBClient

std::string arg_redis_ip = "127.0.0.1";
std::string arg_redis_port = "6380";

args.setRedisIP(arg_redis_ip);
args.setRedisPort(arg_redis_port);
DBClient client(args);

在这一步中我收到此错误 由于消息出现意外异常: 无法连接到 Redis (:6379):名称或服务未知

当我在 hpp 构造函数和 redisCluster 对象中更改时,我给出集群中的 url 作为示例 m_redis_client("tcp://27.0.0.1:6380") 我有一个成功的连接。 你能帮我看看问题出在哪里并且我无法在构造函数中获取正确的值吗?

然后我尝试使用 UT 中的 m_redis_ip 和 m_redis_port 的给定参数调用 DBClient

std::string arg_redis_ip = "127.0.0.1";
std::string arg_redis_port = "6380";

args.setRedisIP(arg_redis_ip);
args.setRedisPort(arg_redis_port);
DBClient client(args);

在这一步中我收到此错误 由于消息出现意外异常: 无法连接到 Redis (:6379):名称或服务未知

c++ redis
1个回答
0
投票

您的

DBClient
的构造函数创建一个
RedisCluster
对象,并具有默认构造的
ConnectionOptions
。默认情况下,主机为空字符串,端口为 6379。这就是为什么您会收到错误消息:无法连接到 Redis (:6379): 名称或服务未知

尽管您尝试设置 ip 和端口,但这些设置并未在 ConnectionOptions 上设置。您可以尝试以下代码:

class DBClient
{
    public:
        DBClient(const Arguments &args) {
         
            connection_options.host = args.getRedisIP();
            connection_options.port = std::stoi(args.getRedisPort());
            m_redis_client = std::make_unique<sw::redis::RedisCluster>(connection_options);
          
        }
        void set(const string &key, const string &val) {
            m_redis_client->set(key, val);
        }
        ~DBClient();
 
    private:
        sw::redis::ConnectionOptions connection_options;
        std::unique_ptr<sw::redis::RedisCluster> m_redis_client;
        
};
© www.soinside.com 2019 - 2024. All rights reserved.