zoukankan      html  css  js  c++  java
  • Redis实现分布式Session

    相关博客:

    http://www.cnblogs.com/yanweidie/p/4763556.html

    http://www.cnblogs.com/lori/p/5368722.html?utm_source=tuicool&utm_medium=referral

    对于多WEB的环境现在已经是必须的了,很难想像一台WEB服务器面对百万并发的响应,所以,我们需要多台WEB服务器集群合作,来缓解这种高并发,高吞吐的场景,而对于多WEB的场景又会有个问题出现,即session存储的问题,如一个用户登陆后,把一个状态信息存储到当前WEB服务器的session里,而你请求其它页面时,很可能就被路由到另一台服务器了,这时,session也就丢了,而对于这种情况,有人把redis这个存储中间件想了起来,对它进行了封装,就有了今天基于redis的session共享机制。

    下面说下安装方法

    1 使用nuget安装redis缓存 StackExchange.Redis

    2 使用nuget安装RedisSession服务 RedisSessionStateProvider

    3 从nuget添加RedisSession之后,它会在你的config文件中写入以下内容,主要是对session进行持久化设置的

    <!--Session使用Redis-->
        <sessionState mode="Custom" customProvider="MySessionStateStore" timeout="30">
          <providers>
            <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="127.0.0.1" port="6379" accessKey="" ssl="false" />
          <!--配置说明
          host - 指定缓存终结点。
          port - 使用非 SSL 端口或 SSL 端口,具体取决于 SSL 设置。
          accessKey - 使用缓存的主密钥或辅助密钥。
          ssl - 如果要使用 SSL 保护缓存/客户端通信,则为 true;否则为 false。 请务必指定正确的端口。
          默认情况下,将为新缓存禁用非 SSL 端口。 为此设置指定 true 可使用 SSL 端口。 有关启用非 SSL 端口的详细信息,请参阅配置缓存主题中的访问端口部分。
          throwOnError - 如果希望在失败时引发异常,则为 true;如果希望操作以静默方式失败,则为 false。 可以通过检查静态 Microsoft.Web.Redis.RedisSessionStateProvider.LastException 属性来检查失败。 默认值为 true。
          retryTimeoutInMilliseconds - 将在此时间间隔内重试失败的操作,以毫秒为单位指定。 首次重试在 20 毫秒后进行,然后重试每隔一秒进行,直到 retryTimeoutInMilliseconds 间隔到期。 在此时间间隔过后,将立即重试操作最后一次。 如果操作仍失败,则会将异常返回给调用方,具体取决于 throwOnError 设置。 默认值为 0,这意味着不重试。
          databaseId - 指定要用于缓存输出数据的数据库。 如果未指定,则使用默认值 0。
          applicationName - 密钥存储在 redis 中作为 {<Application Name>_<Session ID>}_Data。 这使多个应用程序可以共享同一密钥。 此参数是可选的,如果未提供它,则使用默认值。
          connectionTimeoutInMilliseconds - 此设置可覆盖 StackExchange.Redis 客户端中的 connectTimeout 设置。 如果未指定,则使用默认 connectTimeout 设置 5000。 有关详细信息,请参阅 StackExchange.Redis 配置模型。
          operationTimeoutInMilliseconds - 此设置可覆盖 StackExchange.Redis 客户端中的 syncTimeout 设置。 如果未指定,则使用默认 syncTimeout 设置 1000。 有关详细信息,请参阅 StackExchange.Redis 配置模型。
          -->
          </providers>
        </sessionState>

    4 下载是新版本的redis服务端,可以是windows版的,我用的是2.6.13,低版本的redis会出现Eval命令无法识别的问题

    5 处理完成,可以测试你的session了,默认过期时间为1200秒

    注意,上面sessionState里的timeout就是设置session超时的,它同样使用于redis的存储,下面是存在redis里的session,如图

  • 相关阅读:
    ZOJ 1001 A + B Problem
    献给那些心软的人!!
    将表格的数据插入另一个表格
    把链接 显示为方框
    【ibus】设置ibus输入法(pinyin & sunpinyin)
    [Mongo] How to Install Mongo on Debian(不要安装)
    [Sinatra、Mongo] Mongo
    Sinatra+SQLite3+DataMapper
    [sinatra] Sinatra再入门
    [slim] Slim
  • 原文地址:https://www.cnblogs.com/huangyoum/p/6197193.html
Copyright © 2011-2022 走看看