Redis会话状态提供程序管理回退

时间:2016-01-14 10:27:05

标签: asp.net redis session-state-provider

我使用Redis作为会话状态提供程序,但由于我有很多用户,有时会发生Redis故障。所以我希望有一个默认的会话状态提供程序,以便在第一个发生故障时使用。

这可能吗? 还有其他解决方案吗?

由于

2 个答案:

答案 0 :(得分:1)

ASP.NET的会话管道不支持回退到不同的会话提供程序,因此必须将回退功能添加到Redis会话状态提供程序中。但是Redis提供者只与Redis交谈,所以你必须自己做这件事,要么在你自己的project的分支中,要么创建你自己的继承自SessionStateStoreProviderBase的自定义会话提供者并包装访问权限到RedisSessionStateProvider(以及如果您的提供商检测到Redis中断,您希望使用的任何后备存储逻辑)。

但是你现在看起来很麻烦:你应该在哪里临时存储数据(进程内缓存?现在你正在谈论粘性会话.SQL Server?还有另一个要管理的服务器)......而且,一旦Redis重新启动,您如何使用临时存储中的活动会话重新填充它?需要思考很多问题,毫无疑问微软不支持它。

正如@MatíasFidemraizer所提到的,最好的选择是集中精力改进Redis部署,以便它可以处理您的负载,并使用Redis Sentinel设置主从复制来进行自动故障转移。如果这工作太多,那么有许多商业解决方案可以为您完成大量的故障转移(我所工作的公司有一个名为ScaleOut SessionServer的简单产品)

答案 1 :(得分:0)

  

由于我有很多用户,有时会发生Redis故障

我怀疑这应该是幕后的原因。你有足够的内存吗?可能有很多原因,但我怀疑问题是"许多用户"除非你是谷歌,Twitter或者一些流量极高的网站,毕竟Redis也是为那个用例设计的......

因此,我将跳过如何切换状态提供程序的部分,我将转到:

  

还有其他解决方案吗?

答案是Redis Sentinel (follow this link to learn more about it)

来自官方文档:

  

Redis Sentinel为Redis提供高可用性。实际上   这意味着使用Sentinel可以创建Redis部署   在没有人为干预的情况下抵抗某种失败。