配置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",这就是它指示我要做的。无论连接字符串中是否存在此参数,都会发生相同的错误。
考虑到这一点,以下是我的问题……
- 这个提供程序是否支持哨兵配置?
- 如果是,连接字符串的正确格式是什么? 谁有其他好的文档资源吗?除了那篇博文,我在微软的网站上甚至找不到任何东西。
编辑:我应该注意,这是一个自定义的,本地Redis安装。我们没有通过Azure运行。
编辑:我最近试图将我的工作配置指向一个哨兵,我收到"没有连接可用于服务此操作:EVAL"。这使我相信该提供者没有Sentinel支持。有人能证实吗?
我正在使用这个提供商的私人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)尝试。