Redis 会话状态提供程序管理回退
Redis Session State Provider manage fallback
我使用 Redis 作为会话状态提供程序,但由于我有很多用户,有时 Redis 会发生故障。所以我想有一个默认的会话状态提供程序,以防第一个出现故障。
这可能吗?
还有其他解决方案吗?
谢谢
since I have many users sometimes it happens that Redis goes down
我怀疑这应该是幕后原因。你有足够的内存吗?可能有很多原因,但我怀疑问题是 "many users" 除非你是 Google,Twitter 或一些流量极高的网站,毕竟,Redis 也是为该用例设计的...
所以我将跳过关于如何切换状态提供者的部分,我将转到:
Any other solutions?
答案是Redis Sentinel (follow this link to learn more about it)。
来自官方文档:
Redis Sentinel provides high availability for Redis. In practical
terms this means that using Sentinel you can create a Redis deployment
that resists without human intervention to certain kind of failures.
ASP.NET 的会话管道不支持回退到不同的会话提供程序,因此必须将回退功能嵌入到 Redis 会话状态提供程序中。但是 Redis 提供者只与 Redis 对话,所以你必须自己做这件事,或者在你自己的 project or by creating your own custom session provider that inherits from SessionStateStoreProviderBase and wraps access to the RedisSessionStateProvider 分支中(以及如果你的提供者检测到 Redis 你想使用的任何回退存储逻辑)中断)。
但是你现在看起来一团糟:你应该在哪里临时存储数据(一个 in-process 缓存?现在你在谈论粘性会话。SQL 服务器?又一个服务器管理)... 而且,一旦 Redis 恢复正常,您如何使用临时存储中的活动会话重新填充它?问题多多,难怪微软不支持
因此,正如@MatíasFidemraizer 所暗示的那样,您最好的选择是将精力集中在改进 Redis 部署上,以便它可以处理您的负载,并使用 Redis Sentinel 设置 Master-Slave 复制以进行自动故障转移.如果工作量太大,那么有许多商业解决方案可以为您完成繁重的故障转移工作(我工作的公司有一个名为 ScaleOut SessionServer 的 dead-simple 产品)
我使用 Redis 作为会话状态提供程序,但由于我有很多用户,有时 Redis 会发生故障。所以我想有一个默认的会话状态提供程序,以防第一个出现故障。
这可能吗? 还有其他解决方案吗?
谢谢
since I have many users sometimes it happens that Redis goes down
我怀疑这应该是幕后原因。你有足够的内存吗?可能有很多原因,但我怀疑问题是 "many users" 除非你是 Google,Twitter 或一些流量极高的网站,毕竟,Redis 也是为该用例设计的...
所以我将跳过关于如何切换状态提供者的部分,我将转到:
Any other solutions?
答案是Redis Sentinel (follow this link to learn more about it)。
来自官方文档:
Redis Sentinel provides high availability for Redis. In practical terms this means that using Sentinel you can create a Redis deployment that resists without human intervention to certain kind of failures.
ASP.NET 的会话管道不支持回退到不同的会话提供程序,因此必须将回退功能嵌入到 Redis 会话状态提供程序中。但是 Redis 提供者只与 Redis 对话,所以你必须自己做这件事,或者在你自己的 project or by creating your own custom session provider that inherits from SessionStateStoreProviderBase and wraps access to the RedisSessionStateProvider 分支中(以及如果你的提供者检测到 Redis 你想使用的任何回退存储逻辑)中断)。
但是你现在看起来一团糟:你应该在哪里临时存储数据(一个 in-process 缓存?现在你在谈论粘性会话。SQL 服务器?又一个服务器管理)... 而且,一旦 Redis 恢复正常,您如何使用临时存储中的活动会话重新填充它?问题多多,难怪微软不支持
因此,正如@MatíasFidemraizer 所暗示的那样,您最好的选择是将精力集中在改进 Redis 部署上,以便它可以处理您的负载,并使用 Redis Sentinel 设置 Master-Slave 复制以进行自动故障转移.如果工作量太大,那么有许多商业解决方案可以为您完成繁重的故障转移工作(我工作的公司有一个名为 ScaleOut SessionServer 的 dead-simple 产品)