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


Redis和StackExchange.Redis

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

2、當redis 服務器初始化時,會預先分配 16 個數據庫(該數量可以通過配置文件配置),所有數據庫保存到結構 redisServer 的一個成員 redisServer.db 數組中。當我們選擇數據庫 select number 時,程序直接通過 redisServer.db[number] 來切換數據庫。有時候當程序需要知道自己是在哪個數據庫時,直接讀取 redisDb.id 即可。

3、既然我們知道一個數據庫的所有鍵值都存儲在redisDb.dict中,那么我們要知道如果找到key的位置,redis 的字典使用哈希表作為其底層實現。

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

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

我想可能微軟也看見了它的"厲害",所以在微軟官方出的RedisSessionStateProvider中也是采用的StackExchange.Redis來實現的

StackExchange.Redis實現Session

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

Web.config配置

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";

則生成兩個Hash key 

其中wmhe4v0zvbbfinkdnckutv4l就是ASP.NET_SessionId,通過監視請求也可以看見

StackExchange.Redis可以實現Redis所有命令,常用操作查看https://github.com/StackExchange/StackExchange.Redis

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM