分布式会话实现细节

时间:2015-06-18 04:38:03

标签: c# asp.net session azure

下面介绍ASP.NET中会话模块的结构:

enter image description here

据我所知,当应用程序使用分布式会话提供程序(例如Azure中的Redis)时,SessionStateModule会在请求开始时将用户的会话数据反序列化为Session字典。

我想知道模块是否会反序列化用户会话中的所有内容,或者只是在该请求期间访问的会话条目?假设用户的会话有3个条目A,B,C,并且在当前请求中只读取条目B,模块是否会从分布式会话中检索所有3个条目,将它们反序列化为会话字典?

如果它反序列化所有内容,用户会话中的数据越多,每个请求的速度就越慢?因为需要检索/反序列化的数据越多

1 个答案:

答案 0 :(得分:1)

是的,会话状态假定提供者反序列化/序列化整个状态,因此存储更多数据的时间更长,以便开始/结束请求。

作为一种选择,如果您需要存储大量数据 - 在会话状态之外存储不常需要的部分,并在会话状态中保留数据位置的信息。请注意,您需要计算此类拆分状态存储的安全性和到期影响。

或者,如果您要实现自己的提供程序,则可以使用Item方法实现自己的SessionStateStoreData class,该方法将根据需要动态查询项目。遗憾的是,该类没有async版本,因此远程调用获取数据将导致请求处理代码出现意外延迟,并阻止处理请求的线程。

Implementing a Session-State Store Provider

开始可以找到更多详细信息