【问题标题】:C# operations in Redis sentinelRedis sentinel 中的 C# 操作
【发布时间】:2021-05-04 18:43:39
【问题描述】:

我已经为 HA redis 集群(2 个副本、1 个主节点、3 个哨兵)设置了一个本地 docker 环境。只有哨兵会暴露端口(10021、10022、10023)。

我正在使用stackexchange.redis C#客户端v.2.1.58,并尝试做一些基本操作。

这是我的示例代码。

  ConfigurationOptions configuration = new ConfigurationOptions
  {
      /// sentinels 
      EndPoints =
      {
          { "localhost", 10021 },
          { "localhost", 10022 },
          { "localhost", 10023 }
      },
      CommandMap = CommandMap.Sentinel,
      ServiceName = "redismaster",
      Ssl = false,
   };

   ConnectionMultiplexer connection = ConnectionMultiplexer.SentinelConnect(configuration, Console.Out);
   IDatabase database = connection.GetDatabase();

尝试设置操作时

   database.StringSetAsync("key", "value");

我来了

此操作已在命令映射中禁用,无法使用:SET

我认为操作是针对哨兵节点完成的,但我不确定。

对此有何帮助?

在这里回购https://github.com/rms1234567890/redis-sentinel

【问题讨论】:

    标签: c# redis stackexchange.redis redis-cluster redis-sentinel


    【解决方案1】:

    由于 StackExchange Redis 的最新变化,这将不起作用,您需要使用服务名称直接连接 Sentiels

     using(var connection2= ConnectionMultiplexer.Connect("localhost:10021,localhost:10022,localhost:10023,serviceName=redismaster,AllowAdmin=true"))
     {
          IDatabase database2 = connection.GetDatabase();
          database2.StringSet("test-key", "value"); 
          database.StringGet("test-key");
     }
    

    当你在本地机器上运行你的应用程序时,即使这会失败,但如果你在与你的哨兵/Redis 相同的网络中的 docker 实例中运行它,这应该可以工作。简而言之,您还需要公开主 Redis 实例的端口,假设另一个从属也可以成为主实例,因此您需要允许所有 Redis 实例(主、从和哨兵)的入站流量规则

    【讨论】:

      猜你喜欢
      • 2016-04-21
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 2015-11-12
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      相关资源
      最近更新 更多