从上一篇博客《使用Azure Redis Cache》我们已经可以创建并使用Redis Cache为我们服务了。
作为Web开发者,我们都知道Session状态默认是保存在内存中的,它的优点是可以快速读取,但是缺点也是很明显的,只能应用在单台服务器系统上,无法应用在集群系统中,而且一旦服务器宕机或内存泄漏,Session都是可能丢失的。
为了解决在分布式应用中Session的读取问题,我们可以将Session持久化到数据库中,但这又带来了新的问题,增加了IO,降低了应用程序的性能。
1、Redis Cache来了
但是现在我们有了Redis Cache,它完美的解决了进程内Session的一些缺点,既使得应用程序可以快速读取Session,也能分布式系统应用中如鱼得水。
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>
{<Application Name>_<Session ID>}_Data
,如果多个应用程序共享相同的key,则这个参数是可选的。 如果不设置该参数将使用默认值。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状态提供程序
原文:http://www.cnblogs.com/rampb/p/5089144.html