HttpContext的Cache和Items属性有什么区别?

7
什么是 HttpContext 类的 CacheItems 属性之间的区别?
根据 MSDN 文档:
缓存 Cache 获取当前应用程序域的缓存对象。 项 Items 获取可用于在 HTTP 请求期间在 IHttpModule 接口和 IHttpHandler 接口之间组织和共享数据的键/值集合。
我真的不理解该文档试图解释什么。
在处理 ASP.NET Web 应用程序时,我经常使用Items进行请求级别的缓存,以便多个用户控件不会从数据库中查找相同的数据。这在this article中有所描述。
今天,我遇到了使用Cache属性的用法,看起来像是每个请求的缓存。我试图理解它们之间的区别,但找不到任何好的文档来比较这两者。所以我想知道...
HttpContext的Cache和Items属性有什么区别?请尝试用不同的实际场景示例详细说明为什么会选择其中之一。
1个回答

13

Items是每个请求的,因此仅对于该特定用户和给定的HTTP请求可用。缓存在内存中存储一段持续时间,并且不依赖于特定的用户。因此,缓存可以跨多个用户和多个请求共享,但Items是每个用户每个请求。

这取决于您想让数据存在多长时间。我使用Items来存储像EF中的ObjectContext或DbContext这样的东西,我只想将其共享给该特定请求。但是参考表数据所有用户都会在许多请求中使用,因此缓存更好。


请求中是否有任何内容用于分区“Cache”数据?我们有一个 Web 应用程序,为许多不同的域提供请求,每个用户一个域。看起来我正在维护的代码依赖于不同的域来分隔每个用户的缓存数据。我的意思是,用户特定的数据被存储在缓存中,没有任何 UserID 或 Key 中的其他内容。这怎么可能有效?此外,在我链接的文章中,他们在 Items 键中使用了 userID,这使我认为 Items 在许多用户的请求之间是共享的。现在我比以前更困惑了... - Jesse Webb
缓存或会话,因为会话是特定于用户的。您还可以通过将用户ID附加到缓存键来使缓存特定于用户...然后每个用户都可以有自己的特定于缓存的条目。在您提供的文章中,他们提供的方法可以让您将HttpContext.Items中的数据共享给多个用户控件或自定义控件,但仅限于该用户的当前请求。然后,Items集合会在每个请求上构建起来,因此数据在下一个请求上再次可用。 - Brian Mains

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