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
如果覺得本文對你有所幫助不妨點一下【推薦】! 如果文中有不妥或者錯誤的地方還望指出,以免誤人子弟。
作者:張一輝
出處:http://www.cnblogs.com/zhangyihui/
本文以學習、研究和分享為主,版權歸作者和博客園共有,歡迎轉載,但必須在文章頁面明顯位置給出此段申明。