配置ASP.哨兵配置的.NET Redis会话状态提供程序

本文关键字:配置 程序 会话状态 NET ASP 哨兵 Redis | 更新日期: 2023-09-27 18:10:48

我一直试图得到ASP。. NET Redis会话状态提供程序配置在我的应用程序一段时间了。多亏了这篇文章,我终于能够成功地直接连接到主服务器并设置/获取密钥:不能使用ASP连接到Redis服务器。. NET会话状态提供程序

现在,我的下一个问题……使其与Sentinel配置一起工作。

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

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

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

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

我得到这个错误,即使我只有主IP在我的连接字符串。正如您在上面看到的,我的连接字符串中有abortConnect="false",这就是它指示我要做的。无论连接字符串中是否存在此参数,都会发生相同的错误。

考虑到这一点,以下是我的问题……

  1. 这个提供程序是否支持哨兵配置?
  2. 如果是,连接字符串的正确格式是什么?
  3. 谁有其他好的文档资源吗?除了那篇博文,我在微软的网站上甚至找不到任何东西。

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

编辑:我最近试图将我的工作配置指向一个哨兵,我收到"没有连接可用于服务此操作:EVAL"。这使我相信该提供者没有Sentinel支持。有人能证实吗?

配置ASP.哨兵配置的.NET Redis会话状态提供程序

我正在使用这个提供商的私人redis安装。就我所理解的文档,这个提供商正在使用StackExchange.Redis.Strongname包和ConnectionMultiplexer进行配置。有了这个库,就可以使用所描述的配置选项。此外,本文档声明哨兵支持(serviceName)目前尚未实现。

尽管如此,我想知道为什么你需要与哨兵通信,ConnectionMultiplexer能够解决主从设置见文档。此外,我通过关闭redis实例来测试这种行为,并查看了网络流量。请查看ConnectionMultiplexer文档:

一个更复杂的场景可能涉及主/从设置;对于这种用法,只需指定构成逻辑redis层的所有所需节点(它将自动识别主节点):ConnectionMultiplexer redis = ConnectionMultiplexer. connect ("server1:6379,server2:6379");

另外,我的配置设置看起来像这样:

 <add   name="MySessionStateStore" 
    type="Microsoft.Web.Redis.RedisSessionStateProvider"
    connectionString="XXXXXX:6379,XXXXXX:6379,XXXXXX:6379"  
    applicationName="myFancyApp"ssl="false"/>

关于MS.RedisSessionState Provider,我在网站旁边使用了以下教程。

这是通常添加到web中的内容。

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>

这是我们在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>

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