我一直试图在我的应用中配置ASP.NET Redis Session State provider一段时间了。由于这篇文章,我终于能够成功地直接连接到master和set / get键:Can't connect to Redis server using ASP.NET Session State Provider
现在,我的下一个问题......让它与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>
像这样配置我的连接时,收到此错误:
其他信息:无法连接到redis 服务器(一个或多个);要创建断开的多路复用器,请禁用 AbortOnConnectFail。
即使我的连接字符串中只有主IP,我也会收到此错误。如您所见,我有abortConnect =&#34; false&#34;在我的连接字符串中,这是它指示我做的事情。连接字符串中存在或不存在相同的错误。
考虑到这一点,这是我的问题......
编辑:我应该注意,这是一个自定义的本地Redis安装。我们没有通过Azure运行。
编辑:我最近尝试将我的工作配置指向Sentinel并且我收到&#34;没有可用于此操作的连接:EVAL。&#34;这让我相信这个提供商没有Sentinel支持。谁能证实这一点?
答案 0 :(得分:2)
我正在使用此提供程序进行私有redis安装。据我所知,该提供程序使用StackExchange.Redis.Strongname包和ConnectionMultiplexer进行配置。使用此库,可以使用描述的configuration options。此外,该文档指出目前尚未实现sentinel支持(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,我在site旁边使用了以下教程。
答案 1 :(得分: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>
这是我们与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)次尝试放弃之前。