7

我们已经为我们的 web 应用程序实现了 Redis 会话状态提供程序,它就像一个魅力,但我想知道如果 redis 服务器失败或 web 服务器无法连接到 redis 服务器会发生什么。

有没有办法使用 InProc 会话状态管理作为 Redis 的故障转移?我找不到任何有关声明多个会话状态提供程序的文档,因此如果 redis 失败,系统可以继续使用 inproc 工作。(我接受在 redis 中丢失会话状态并在失败的情况下从头开始,并在进程中再次丢失会话状态并在 redis 可用时再次从头开始)

4

3 回答 3

0

你需要为你的 redis-server 定义 slave 并使用 redis sentinel 来监控你的服务器

于 2015-04-13T12:12:19.247 回答
0

我一直有类似的问题,Redis 作为我们会话存储的支持失败,我找不到任何允许故障转移/故障回复到其他 SessionStateProvider 的东西。

我希望那里有一些东西可以写入内存表或类似表中的 Redis 和 SqlServer,然后从 1 读取,如果从 2 读取失败。但是,这似乎还不存在。

于 2020-03-24T09:29:32.817 回答
-1

我正在使用 StackExchange 库连接到 redis 服务器。这只是一个简单的代码,它只显示如何订阅事件而不是将其作为最终解决方案。每当哨兵选择新服务器时,您都会收到一个事件,因此您可以选择新服务器。

ConnectionMultiplexer multiplexer =
   ConnectionMultiplexer.Connect(new ConfigurationOptions
   {
       CommandMap = CommandMap.Sentinel,
       EndPoints = { { "127.0.0.1", 26379 }, { "127.0.0.1", 26380 } },
       AllowAdmin = true,
       TieBreaker = "",
       ServiceName = "mymaster",
       SyncTimeout = 5000
   }); 
    multiplexer.GetSubscriber().Subscribe("*", (c, m) =>
        {

            Debug.WriteLine("the message=" + m);
            Debug.WriteLine("channel=" + c);

            try
            {
                var sentinelServer = multiplexer.GetServer("127.0.0.1", 26379).SentinelGetMasterAddressByName("mymaster");
                Debug.WriteLine("Current server=" + sentinelServer);
                Debug.Flush();
            }
            catch (Exception)
            {
                var sentinelServer = multiplexer.GetServer("127.0.0.1", 26380).SentinelGetMasterAddressByName("mymaster");
                Debug.WriteLine("Current server=" + sentinelServer );
                Debug.Flush();
            }
        });
于 2015-09-04T07:18:50.047 回答