redis如何工作以帮助在窗口中的会话持久性azure

问题描述:

当我们在云上部署应用程序并管理流量时,我们使用负载平衡器。redis如何工作以帮助在窗口中的会话持久性azure

现在,如果用户通过负载均衡器访问服务器1,他们的会话就是使用该服务器创建的,并且一段时间后它们的命中被负载均衡器引用到服务器2。他们的新课程是否会再次创建?

如果发生这种情况,并且我使用redis缓存在整个交互过程中保持会话,那么redis管理如何在所有服务器上保持会话?

+0

Redis的只是一个键/值缓存,独立于任何运行的虚拟机/ Web应用程序/云服务。不知道我完全明白你在问什么。 –

+0

我问过一次用户会话是否已经用一台服务器创建,一段时间后他的命中到另一台服务器,每次他的命中到不同的服务器,这是否意味着每次创建一个新的会话,或者有另一个场景?。如果我使用redis缓存来维护一旦通过用户交互创建的服务器,那将是正确的方式吗? – SajidBp

您需要将您的应用程序指向中央Redis缓存。您的缓存独立于Web应用程序运行,此Web应用程序的所有会话数据都将存储在此Redis缓存中。这里(https://docs.microsoft.com/en-us/azure/redis-cache/cache-aspnet-session-state-provider)是您如何配置ASP.NET应用程序以使用Redis会话状态提供程序。

+0

我的观点是,当负载平衡器处理用户以管理我的应用程序中的流量时,Redis缓存是否将支持用户会话?一旦创建会话是针对一个实例将通过所有实例持久化?我明白你的观点需要一些细节。 – SajidBp

+0

如果所有实例共享相同的redis,则会话将被共享。 –

+0

任何ASP.NET会话状态存储中的会话数据均与ASP.NET会话标识相关联。对于特定的ASP.NET会话ID,应用程序的所有实例都应该引用相同的会话数据(在你的情况下,来自Redis缓存)。 –

Redis是一个关键/价值商店。您需要做的是将密钥作为用户会话的一些唯一标识符,并将会话信息封装在某个对象中。将此对象的序列化表单存储在redis中的密钥中,并在用户登录时检查密钥(如果会话存在),如果是则返回,如果不是,则创建一个新的会话。正如在以前的答案正确地指出,你需要利用集中的Redis

最简单的方法是将Microsoft.Web.RedisSessionStateProvider NuGet包安装到你的应用程序,那么你可以访问会话以正常的方式和程序包将插入Azure Redis并为您分享您的会话。

Detailed Instructions

您需要正确的数据配置它在web.config中,这样的事情:

<sessionState mode="Custom" customProvider="MySessionStateStore" timeout="10" regenerateExpiredSessionId="true"> 
    <providers> 
    <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" throwOnError="true" retryTimeoutInMilliseconds="1500" connectionString="myrediscache.redis.cache.windows.net:6380,password=thepassword,ssl=True,abortConnect=False,syncTimeout=5000" /> 
    </providers> 
</sessionState>