Azure Redis 缓存的 ASP.NET 会话状态提供程序
Azure Redis Cache 提供了一个会话状态提供程序,你可以使用其在缓存中(而不是内存中或在 SQL Server 数据库中)存储会话状态。要使用缓存会话状态提供程序,先首先配置缓存,然后使用 Redis 缓存会话状态 NuGet 包配置用于缓存的 ASP.NET 应用程序。
- 若要使用 Redis Cache Session State NuGet 程序包配置 Visual Studio 中的应用程序,请右键单击解决方案资源管理器中的项目,然后选择管理 NuGet 程序包。
- 将 RedisSessionStateProvider 键入联机搜索文本框中,从结果中选择,单击安装。
备注 Redis Session State Provider NuGet 程序包对 StackExchange.Redis.StrongName 程序包有依赖。如果 StackExchange.Redis.StrongName 程序包未在项目中显示,其将安装。请注意,除具有强名称 StackExchange.Redis.StrongName 程序包,还有 StackExchange.Redis 非强名称版本。如果你的项目使用非强命名 StackExchange redis 版本,在安装 Redis Session State Provider NuGet 程序包前后,你必须将其卸载,否则你将获取与项目中冲突的名称。有关这些程序包的更多信息,请参阅 配置 Azure Redis Cache 的 .NET 缓存客户端。
NuGet 程序包下载并添加所需的程序集引用,然后添加以下会话到 web.config 文件,该文件包含 ASP.NET 应用程序所需的配置以使用 Redis Cache 会话状态提供程序。
<sessionState mode="Custom" customProvider="MySessionStateStore"> <providers> <!-- <add name="MySessionStateStore" 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] /> --> <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="127.0.0.1" accessKey="" ssl="false" /> </providers> </sessionState>
- 为 Azure Management Portal Preview 缓存边栏中的属性配置该值,并配置所需的其他值。
备注 有关访问缓存属性的说明,请参阅 Review cache settings。 host
– 指定缓存端点。port
– 根据ssl
设置,使用非 SSL 端口或 SSL 端口。accessKey
– 使用缓存的主密钥或次密钥。ssl
– 如果你想保护缓存/客户端与 SSL 的通信,true;否则为 false。确保指定正确的port
。
重要提示 默认情况下,对新缓存禁用了非 SSL 端口。将此设置指定为 true 以使用 SSL 端口。有关启用非 SSL 端口的详细信息,请参阅在 Azure Redis Cache 中配置缓存主题中的Access Ports。 throwOnError
– 如果由于故障而引发异常,则为 true;如果希望操作失败而不提示,则为 false。通过选中Microsoft.Web.Redis.RedisSessionStateProvider.LastException
属性检查故障。默认值为 true。retryTimeoutInMilliseconds
– 在此期间(以毫秒计)将重试失败的操作。第一次重试发生 20 毫秒后,每秒重试一次,直到retryTimeoutInMilliseconds
间隔期满。此间隔后立即重试最后一次操作。如果操作仍失败,根据throwOnError
设置,将异常情况返回到调用程序。默认值为0
,这意味没有重试。databaseId
– 指定用于缓存输出数据的数据库。如果未指定,则使用默认值0
。applicationName
– 密钥在 Redis 中存储为<AppName>_<SessionId>_Data
。这将使多个应用程序共享同一个密钥。此参数为可选,如果不提供,就使用默认值。connectionTimeoutInMilliseconds
– 此设置允许你覆盖 StackExchange.Redis 客户端中的connectTimeout
设置。如果未指定,则使用5000
的默认connectTimeout
设置。有关详细信息,请参阅 TechNet 上的 StackExchange.Redis 配置模型。operationTimeoutInMilliseconds
– 此设置允许你覆盖 StackExchange.Redis 客户端中的syncTimeout
设置。如果未指定,则使用1000
的默认syncTimeout
设置。有关详细信息,请参阅 TechNet 上的 StackExchange.Redis 配置模型。
- 请不要忘记将 web.config 文件中的标准
InProc
会话状态提供程序注释掉。
<!-- <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> -->
一旦执行这些步骤,将配置应用程序以使用 Redis 缓存会话状态提供程序。在你使用应用程序中的会话时,其将在 Azure Redis Cache 实例中存储。