从上一篇博客《使用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]//如果RedisCache开启了SSL,那么此处需填写为SslPort,否则报错
accessKey = "" [String]
ssl = "false" [true|false]//如果RedisCache开启了SSL,此处填true
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状态提供程序的更多相关文章

  1. Azure Redis Cache作为ASP.NET 缓存输出提供程序

    前一篇文章<Azure Redis Cache作为ASP.NET Session状态提供程序 >我们已经知道如何将ASP.NET应用程序Session存储在Redis Cache中,这里我 ...

  2. Azure Redis 缓存的 ASP.NET 会话状态提供程序

    Azure Redis Cache 提供了一个会话状态提供程序,你可以使用其在缓存中(而不是内存中或在 SQL Server 数据库中)存储会话状态.要使用缓存会话状态提供程序,先首先配置缓存,然后使 ...

  3. Azure Redis Cache

    将于 2014 年 9 月 1 日停止Azure Shared Cache服务,因此你需要在该日期前迁移到 Azure Redis Cache.Azure Redis Cache包含以下两个层级的产品 ...

  4. 利用Azure Redis Cache构建百万量级缓存读写

    Redis是一个非常流行的基于内存的,低延迟,高吞吐量的key/value数据存储,被广泛用于数据库缓存,session的管理,热数据高速访问,甚至作为数据库方式提高应用程序可扩展性,吞吐量,和实施处 ...

  5. Azure Redis Cache (1) 入门

    <Windows Azure Platform 系列文章目录> Microsoft Azure Redis Cache基于流行的开源Redis Cache. 1.功能 Redis 是一种高 ...

  6. Azure Redis Cache (2) 创建和使用Azure Redis Cache

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China. 注意: 截至今日2015年10月7日,国内由世纪互联运维的Azur ...

  7. Azure Redis Cache (3) 创建和使用P级别的Redis Cache

    <Windows Azure Platform 系列文章目录> 在笔者之前的文档里面已经说明了,Azure Redis Cache分为三个不同的级别: - 基本,Basic,不包含SLA ...

  8. Azure Redis Cache (4) 配置和管理Redis Cache

    <Windows Azure Platform 系列文章目录> 我们在创建完Azure Redis Cache后,经常需要切换Redis Cache的服务级别,这里我简单介绍一下使用Azu ...

  9. 使用Azure Redis Cache

    通过上一篇博客<Redis Cache 简介>我们已经简单了解了Azure Redis Cache,这里就不过多赘述了. 1.创建Redis Cache 创建Redis Cache之前,我 ...

随机推荐

  1. Scott Hanselman's 2014 Ultimate Developer and Power Users Tool List for Windows -摘自网络

    Everyone collects utilities, and most folks have a list of a few that they feel are indispensable.  ...

  2. 100+经典Java面试题及答案解析

    面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...

  3. 查看Linux系统之终端登录的方式(last命令)

    更多,请看他人博客:last 命令 http://www.cnblogs.com/kerrycode/p/4223751.html http://www.xitongzhijia.net/xtjc/2 ...

  4. python 定义函数

    在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的my_abs函数 ...

  5. 常用的各种标准下载网站(HB GB GJB MH)

    标准分享网 http://www.bzfxw.com/ 标准下载网 http://www.bzxz.net/ 搜标准网   http://www.biaozhunw.com/Index.html 标准 ...

  6. 74LS164 for stm32 源码下载

      在单片机系统中, 如果并行口的IO资源不够,而串行口又没有其他的作用, 那么我们可以用74LS164来扩展并行IO口,节约单片机资源.       74LS164是一个串行输入并行输出的移位寄存器 ...

  7. @@IDENTITY与SCOPE_IDENTITY的用法

    SCOPE_IDENTITY   和   @@IDENTITY   的作用都是取得返回在当前会话中的任何表内所生成的最后一个标识值,简单的说就是在执行一条插入语句之后使用@@IDENTITY的全局变量 ...

  8. Dev XtraTreeList 学习

    本文转载:http://www.cnblogs.com/VincentLuo/archive/2012/01/06/2313983.html 一.设置载请保留地址http://www.cnblogs. ...

  9. 【不积跬步,无以致千里】五个常用的Linux监控脚本代码

    为大家提供五个常用Linux监控脚本(查看主机网卡流量.系统状况监控.监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告.监控CPU和内存的使用情况.全方位监控主机),有需要的朋友不妨看 ...

  10. IOS开发-加载本地音乐

    IOS开发-加载本地音乐 $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text() ...