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

原文地址:https://www.cnblogs.com/5ishare/p/7507980.html