eddik 发表于 2017-12-21 16:54:28

SessionStateMode之Redis共享session

  周六的时候用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
页: [1]
查看完整版本: SessionStateMode之Redis共享session