微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Redis哨兵中的C#操作

如何解决Redis哨兵中的C#操作

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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。