周六的時候用SQL Server來實現session共享,今天下班早就試了下使用Redis來實現session共享。接着上一篇博客,上一篇使用sessionState節點mode="SQLServer"來實現不同應用的session共享,其實它還有一個mode="custom",用它可以將session放在redis等其他的緩存數據庫中。
一、redis服務端配置
關於Redis的服務端配置我之前的博客里面也有,可以參考我的博客C#Redis主從復制,這里只啟動了一個redis,端口為6379.
二、Web應用配置
1.RedisProvider配置
使用nuget查找redissession,安裝RedisSessionProvider,WebForm和MVC中都要進行安裝
2.安裝之后又readme,里面有提示,怎么使用RedisSessionProvider
在webform、mvc的web.config中配置下面的sessionState節點
<sessionState mode="Custom" customProvider="RedisSessionProvider"> <providers> <add name="RedisSessionProvider" type="RedisSessionProvider.RedisSessionStateStoreProvider, RedisSessionProvider" host="127.0.0.1" port="6379" accessKey="" ssl="false"/> </providers> </sessionState>
在Global文件中配置下面的代碼,並添加引入
using RedisSessionProvider.Config;
using StackExchange.Redis;
ConfigurationOptions redisConfigOpts = StackExchange.Redis.ConfigurationOptions.Parse("127.0.0.1:6379"); RedisSessionProvider.Config.RedisConnectionConfig.GetSERedisServerConfig = (HttpContextBase context) => { return new KeyValuePair<string, StackExchange.Redis.ConfigurationOptions>( "DefaultConnection", redisConfigOpts); };
對於webform設置session和mvc獲取session就不貼上了,上一博客也有,先運行webform,然后運行mvc,此時會出錯如下圖,這個需要將StackExchange.Redis.dll更新到最新。
使用redis-cli客戶端查看redis存的數據,可以看到端口6379中有keys,而這個key其實就是sessionid,在瀏覽器中也是可以看到的。
三、運行demo
先啟動webform,然后啟動mvc,可以在mvc中通過ViewBag獲取到的session。
四、總結
這個僅是一個簡單的demo,在實際應用中一般會通過nginx來進行負載均衡,及在瀏覽器到服務器直接通過nginx來進行web服務器的負載均衡,在web服務器到redis直接也是通過nginx來進行負載均衡,redis進行主從復制,這樣可以很方便的進行水平擴展。
參考:http://www.cnblogs.com/yanweidie/tag/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/
http://www.cnblogs.com/sunyj/p/5413495.html