周六的时候用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