【发布时间】:2015-11-18 00:22:28
【问题描述】:
一段时间以来,我一直在尝试用 Redis 替换 ASP.NET Session。使用Microsoft ASP.NET Session State Provider for Redis 的多个小时都没有结果。
我们有一个用于 Redis 的本地 Sentinel 配置。最初我认为这不起作用,因为提供者不支持哨兵。我将连接字符串切换为使用主服务器,希望我至少能够建立连接。依然没有。
我已为此提供程序尝试了多种配置,并不断收到“没有可用于请求的连接”或“其他信息:无法连接到 redis 服务器;要创建断开连接的多路复用器,请禁用 AbortOnConnectFail . UnableToResolvePhysicalConnection on PING。”
以下是我尝试过的一些配置:
尝试 #1:
<connectionStrings>
<add name="RedisConnection" connectionString="1.2.3.4:5,abortConnect=false,ssl=true,password=XXXXXX,ConnectTimeout=10000"/>
</connectionStrings>
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="RedisConnection" />
</providers>
</sessionState>
尝试 #2:
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="1.2.3.4" port="5" accessKey="XXXXXXX" />
</providers>
</sessionState>
尝试 #3:
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="1.2.3.4:5" accessKey="XXXXXXX" />
</providers>
</sessionState>
我发现有关此提供程序的文档很少,故障排除一直是一个挑战。与 Microsoft 提供商相比,我遇到了第三方提供商并决定尝试一下。
我能够成功连接Harbour.RedisSessionStateStore,使用以下配置:
<sessionState mode="Custom" customProvider="RedisSessionStateProvider">
<providers>
<clear />
<add name="RedisSessionStateProvider" type="Harbour.RedisSessionStateStore.RedisSessionStateStoreProvider" host="PASSWORD@1.2.3.4:5" clientType="pooled" />
</providers>
</sessionState>
考虑到这一点,Microsoft 提供程序的连接字符串的正确格式是什么?对我来说,从第一方图书馆获得内部支持会更容易,在这一点上,让这项工作发挥作用将是道德上的胜利。
另外,如果有人知道我如何配置它以点击 Sentinel 并确定要连接的主实例,我会欢迎您发表博客文章或任何形式的有关该主题的知识分享。
谢谢!
【问题讨论】:
-
你在使用 Azure Redis 缓存吗?还是本地/云自定义服务器?
-
本地、自定义服务器。
-
我会尝试复制您的场景。您的 redis 实例是否在 Windows 上运行?哪个操作系统版本?
-
这是一个在 Linux 上运行的机器。
标签: c# asp.net .net session redis