当前位置:首页 > 开发 > 互联网 > 正文

Azure Redis Cache作为ASP.NET Session状态提供程序

发表于: 2015-12-30   作者:公羊天纵   来源:转载   浏览次数:
摘要: 从上一篇博客《使用AzureRedisCache》我们已经可以创建并使用RedisCache为我们服务了。作为Web开发者,我们都知道Session状态默认是保存在内存中的,它的优点是可以快速读取,但是缺点也是很明显的,只能应用在单台服务器系统上,无法应用在集群系统中,而且一旦服务器宕机或内存泄漏,Session都是可能丢失的。为了解决在分布式应用中Session的读取问题,我们可以将Sessio

从上一篇博客《使用Azure Redis Cache》我们已经可以创建并使用Redis Cache为我们服务了。

作为Web开发者,我们都知道Session状态默认是保存在内存中的,它的优点是可以快速读取,但是缺点也是很明显的,只能应用在单台服务器系统上,无法应用在集群系统中,而且一旦服务器宕机或内存泄漏,Session都是可能丢失的。

为了解决在分布式应用中Session的读取问题,我们可以将Session持久化到数据库中,但这又带来了新的问题,增加了IO,降低了应用程序的性能。

1、Redis Cache来了

但是现在我们有了Redis Cache,它完美的解决了进程内Session的一些缺点,既使得应用程序可以快速读取Session,也能分布式系统应用中如鱼得水。

  • 快读读取,Redis Cache是一种高级的键值存储
  • 提供主从复制,保证了数据的可用性
  • 支持大多数编程语言
  • 提供身份验证,保证数据的安全性

2、Redis Cache作为会话状态提供程序

创建一个Web Application,右键"引用",点击管理NuGet程序包,在搜索框中输入RedisSessionStateProvider,然后安装。

由于Session状态提供程序包依赖StackExchange.Redis.StrongName程序集,我们会看到StackExchange.Redis.StrongName也被安装引用到Web应用程序中。这里有一个细节需要注意下:StackExchange.Redis.StrongName是strong-named version,而StackExchange.Redis是non-strong-named version。所以如果Web应用程序如果在之前引用了StackExchange.Redis程序集,那么我们需要删除对StackExchange.Redis程序集的引用。

完成程序集的引用后,我们可以在web.config文件中看到下面这段xml内容:

<sessionStatemode="Custom" customProvider="MySessionStateStore">
    <providers>
    <!--
    <add name="MySessionStateStore"
        type="Microsoft.Web.Redis.RedisSessionStateProvider"
        host = "127.0.0.1" [String]
        port = "" [number]
        accessKey = "" [String]
        ssl = "false" [true|false]
        throwOnError = "true" [true|false]
        retryTimeoutInMilliseconds = "0" [number]
        databaseId = "0" [number]
        applicationName = "" [String]
        connectionTimeoutInMilliseconds = "5000" [number]
        operationTimeoutInMilliseconds = "5000" [number]
    />
    -->
    </providers>
</sessionState>
  • host – Redis Cache的host name/endpoint
  • port – 使用你的Redis Cache的SSL port或者非SSL port,这取决你的ssl设置的值
  • accessKey – Redis Cache的Keys
  • ssl – true (Cache/Client之间安全的通信); 否则设为 false
    • 默认禁用 non-SSL port,有关启用 non-SSL port,参阅 Access Ports 
  • throwOnError – true (在事件出错时抛出异常),否则设为 false. 你可以在静态属性 Microsoft.Web.Redis.RedisSessionStateProvider.LastException检查异常信息, 默认为true。
  • retryTimeoutInMilliseconds – 在此时间间隔内重试操作(单位:毫秒)
  • databaseId – 指定一个数据库用来存储缓存输入数据。如果未指定,默认值为0。
  • applicationName – 缓存key存储在Redis中命名规则为:{<Application Name>_<Session ID>}_Data,如果多个应用程序共享相同的key,则这个参数是可选的。 如果不设置该参数将使用默认值。
  • connectionTimeoutInMilliseconds – 这个设置会覆盖connectTimeout参数设置。如果未设置,那么会使用默认的connectTimeout值5000,详情请参考 StackExchange.Redis configuration model.
  • operationTimeoutInMilliseconds – 这个设置会覆盖syncTimeout参数设置。如果未设置,那么会使用默认的syncTimeout值1000,详情请参考 StackExchange.Redis configuration model.

3、注释ASP.NET默认的Session状态提供程序

最后一步也是非常重要的,我们打开web.config文件将一下xml内容注释

<!-- <sessionState mode="InProc" 
     customProvider="DefaultSessionProvider">
     <providers>
        <add name="DefaultSessionProvider" 
              type="System.Web.Providers.DefaultSessionStateProvider, 
                    System.Web.Providers, Version=1.0.0.0, Culture=neutral, 
                    PublicKeyToken=31bf3856ad364e35" 
              connectionStringName="DefaultConnection" />
      </providers>
</sessionState> -->

 

更多关于Session State提供的更佳实现,参考Web Development Best Practices (Building Real-World Cloud Apps with Azure)

 

Azure Redis Cache作为ASP.NET Session状态提供程序

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
提供程序模型的基本原理 提供程序模型不是一种应用程序特征,所以最终用户是无法看见的。提供程序模
提供程序模型的基本原理 提供程序模型不是一种应用程序特征,所以最终用户是无法看见的。提供程序模
ASP.NET 会话状态   ASP.NET默认情况下将会话信息存储在ASP.NET应用程序的内存空间【InPro】,存
最近公司的项目要是用cloud Service 所以研究了下 Azure cache 的配置与使用。 首先创建项目 第二步
一、Session概述 Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关
[Asp.Net]状态管理(Session、Application、Cache) 上篇博文介绍了在客户端状态管理的两种方式:ht
  这些对象都是用来保存信息的,包括用户信息,传递值的信息,全局信息等等。下面主要说一下他们
除了mooncake的中国大陆区域 Azure status http://azure.microsoft.com/en-us/status/?rnd=1#curren
  《Windows Azure Platform 系列文章目录》   对于传统的自建数据中心,从底层的Network,Stor
Application/Session/Cookie/viewstate/Cache/隐藏域/查询字符串的比较 Posted on 2009-01-06 16:33
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号