Redis哨兵中的C#操作

时间:2021-01-31 11:00:24

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

我为 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

1 个答案:

答案 0 :(得分:2)

由于 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 实例(主站、从站和哨兵)的入站流量规则< /p>