为Sentinel配置配置ASP.NET Redis会话状态提供程序

Chr*_*tka 5 c# asp.net session redis redis-sentinel

我一直试图在我的应用程序中配置ASP.NET Redis会话状态提供程序一段时间.由于这篇文章,我终于能够成功连接到master和set/get键:无法使用ASP.NET Session State Provider连接到Redis服务器

现在,我的下一个问题是...使用Sentinel配置.

我熟悉SENTINEL get-master-addr-by-name master-dev-sessionstate命令来确定主人.这个提供商是否内置了此功能?基于上面链接的博客文章的评论(这也是我可以找到的唯一文档),似乎我应该能够使用connectionString属性来传递多个主机.不过,我不确定这些多个主机是否打算成为Sentinels.

<connectionStrings>
  <add name="RedisConnection" connectionString="1.2.3.4:5,6.7.8.9:10,abortConnect=false,ssl=false,password=XXXXXX,operationTimeoutInMilliseconds=5000"/>
</connectionStrings>

<sessionState mode="Custom" customProvider="MySessionStateStore">
  <providers>
    <clear/>
    <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="RedisConnection"/>
  </providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud)

像这样配置我的连接时,我收到此错误:

附加信息:无法连接到redis服务器; 要创建断开连接的多路复用器,请禁用AbortOnConnectFail.

即使我的连接字符串中只有主IP,我也会收到此错误.如上所示,我的连接字符串中有abortConnect ="false",这就是它指示我做的事情.连接字符串中存在或不存在相同的错误.

考虑到这一点,这是我的问题......

  1. 此提供商是否支持Sentinel配置?
  2. 如果是,连接字符串的正确格式是什么?
  3. 有没有人有这方面的任何其他良好的文档资源?我甚至都没有在该博客文章之外的微软网站上找到任何东西.

编辑:我应该注意,这是一个自定义的本地Redis安装.我们没有通过Azure运行.

编辑:我最近试图将我的工作配置指向Sentinel,我收到"没有连接可用于服务此操作:EVAL." 这让我相信这个提供商没有Sentinel支持.谁能证实这一点?

小智 0

这是安装 nuget 包时通常添加到 web.config 中的内容;

sessionState mode="Custom" customProvider="MySessionStateStore">
  <providers>
    <!--
      <add name="MySessionStateStore" 
        host = "127.0.0.1" [String]
        port = "" [number]
        accessKey = "" [String]
        ssl = "false" [true|false]
        throwOnError = "true" [true|false]
        retryTimeoutInMilliseconds = "0" [number]
        databaseId = "0" [number]
        applicationName = "" [String]
        connectionTimeoutInMilliseconds = "5000" [number]
        operationTimeoutInMilliseconds = "5000" [number]
      />
    -->
    <add name="MySessionStateStore" 
         type="Microsoft.Web.Redis.RedisSessionStateProvider"
         host="127.0.0.1" 
         accessKey="" 
         ssl="false" />
  </providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud)

这是我们与 Azure 缓存服务器一起使用的一个。

<sessionState mode="Custom" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider"
          type="Microsoft.Web.Redis.RedisSessionStateProvider"
          port="6380"
          host="xxxxxxxx.redis.cache.windows.net"
          accessKey="vCG........We0n="
          ssl="true"
          connectionTimeoutInMilliseconds = "5000"
          operationTimeoutInMilliseconds = "1000"
          retryTimeoutInMilliseconds="3000" />
  </providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud)

我们将重试超时设置为 3 秒,操作超时设置为 1 秒,这样在放弃之前允许尝试 3 次 (1000/3000=3)。