2017-03-02 29 views
0

當我們在雲上部署應用程序並管理流量時,我們使用負載平衡器。redis如何工作以幫助在窗口中的會話持久性azure

現在,如果用戶通過負載均衡器訪問服務器1,他們的會話就是使用該服務器創建的,並且一段時間後它們的命中被負載均衡器引用到服務器2。他們的新課程是否會再次創建?

如果發生這種情況,並且我使用redis緩存在整個交互過程中保持會話,那麼redis管理如何在所有服務器上保持會話?

+0

Redis的只是一個鍵/值緩存,獨立於任何運行的虛擬機/ Web應用程序/雲服務。不知道我完全明白你在問什麼。 –

+0

我問過一次用戶會話是否已經用一臺服務器創建,一段時間後他的命中到另一臺服務器,每次他的命中到不同的服務器,這是否意味着每次創建一個新的會話,或者有另一個場景?。如果我使用redis緩存來維護一旦通過用戶交互創建的服務器,那將是正確的方式嗎? – SajidBp

回答

1

您需要將您的應用程序指向中央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緩存)。 –

0

Redis是一個關鍵/價值商店。您需要做的是將密鑰作爲用戶會話的一些唯一標識符,並將會話信息封裝在某個對象中。將此對象的序列化表單存儲在redis中的密鑰中,並在用戶登錄時檢查密鑰(如果會話存在),如果是則返回,如果不是,則創建一個新的會話。正如在以前的答案正確地指出,你需要利用集中的Redis

0

最簡單的方法是將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>