負載均衡@StackExchange.Redis實現Session外置--純乾貨餵飽你

Redis和StackExchange.Redis

redis有多個數據庫
一、redis 中的每個數據庫,都由一個 redisDb 的結構存儲。其中,redisDb.id 存儲着 redis 數據庫以整數表示的號碼。redisDb.dict 存儲着該庫全部的鍵值對數據。redisDb.expires 保存着每個鍵的過時時間。git

二、當redis 服務器初始化時,會預先分配 16 個數據庫(該數量能夠經過配置文件配置),全部數據庫保存到結構 redisServer 的一個成員 redisServer.db 數組中。當咱們選擇數據庫 select number 時,程序直接經過 redisServer.db[number] 來切換數據庫。有時候當程序須要知道本身是在哪一個數據庫時,直接讀取 redisDb.id 便可。github

三、既然咱們知道一個數據庫的全部鍵值都存儲在redisDb.dict中,那麼咱們要知道若是找到key的位置,redis 的字典使用哈希表做爲其底層實現。redis

StackExchange.Redis,確定少不了提一下ServiceStack.Redis,這兩個都是redis在c#裏面比較優秀的SDk.數據庫

ServiceStack.Redis 4 開始已經收費了,因此你懂的.StackOverflow他們在開發並使用StackExchange.Redisc#

我想可能微軟也看見了它的"厲害",因此在微軟官方出的RedisSessionStateProvider中也是採用的StackExchange.Redis來實現的數組

StackExchange.Redis實現Session

使用Nuget安裝RedisSessionStateProvider,sessionState的模式默認有Custom,InProc,Off,SQLServer,StateServer這五種,默認的就是InProc,也就是咱們經常使用的進程內Session.使用自定義的Session實現確定就要選Custom模式了.服務器

Web.config配置session

1  <sessionState mode="Custom" customProvider="MySessionStateStore">
2       <providers>
3         <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="ip:端口,password=密碼,ssl=false,abortConnect=false,connectTimeout=5000"/>
4       </providers>
5  </sessionState>

 如在代碼中使用 Session["redissession"] = "sa";ide

則生成兩個Hash key 學習

其中wmhe4v0zvbbfinkdnckutv4l就是ASP.NET_SessionId,經過監視請求也能夠看見

StackExchange.Redis能夠實現Redis全部命令,經常使用操做查看https://github.com/StackExchange/StackExchange.Redis

 

相關文章
相關標籤/搜索