ASP.net应用程序会话缓存最佳实践和模式

4
在asp.net中,主要的数据存储有应用程序、会话和对象缓存。我使用常识提示(例如,不要将特定于用户的数据放入应用程序中,不要将未经管理的资源放入会话等等),但说实话,我从MSDN或像Haack和Gu这样的知名人物那里从未遇到过涵盖所有三者的建议和示例(例如,谷歌对MSDN的第一个搜索结果讨论使用应用程序作为全局缓存,那么对象缓存是用来干什么的?)。
此外,我发现很少讨论情景比较,例如,我知道过度使用会话会轻易地占用内存,但如果您使用对象缓存替代存储相同的数据会发生什么呢?
编辑:到目前为止,这是我找到的最好的信息:http://msdn.microsoft.com/en-us/library/ff647787.aspx
2个回答

2
使用 Session 存储用户特定的信息,因为框架会自动将每个会话存储与特定用户关联。
使用对象缓存来存储可以缓存一次并在整个应用程序或一组用户之间重复使用的信息。如果您将特定于用户的数据存储在对象缓存中,则必须发明某种机制来关联缓存条目。这不仅需要您额外的工作,而且可能会以增加恶意用户进行会话欺骗等行为的可能性的方式完成。
我不知道您何时需要使用 Application 对象。如果我没记错的话,Application 对象更像是经典 ASP 的遗物。
另一种同样重要的缓存形式是通过 HttpContext.Items 集合进行的每个请求缓存。这允许您在请求的生命周期内缓存数据,并且如果您在单个请求期间持续请求相同的数据(例如从页面上的不同用户控件中请求),则非常有用。有关此方法的更多信息,请参见 HttpContext.Items - a Per-Request Cache Store

0
我建议创建一个包装类,至少为会话创建一个包装类,如果这些在您的代码中被广泛使用。这样,您可以注入一个类的实例来执行真正的工作,并在单元测试中使用模拟版本。我在一个大项目中做过这个,其中会话被广泛使用,效果非常好。
您可以将此与外观模式结合使用 - 包装器将提供您需要的特定方法,而不是公开一般接口。例如,会话接受对象并返回对象,它没有强类型。包装器可以具有强类型的添加和获取方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接