【问题标题】:How to get System.Runtime.Caching to do 'per request' caching in asp.net?如何让 System.Runtime.Caching 在 asp.net 中执行“每个请求”缓存?
【发布时间】:2012-11-28 20:18:48
【问题描述】:

正如主题所说。我有一个提供 DAL 的 DLL,我想让它在特定实例中开始缓存。

提到的 DLL 用于 asp.net 应用程序和控制台应用程序。

我想做的是使用 System.Runtime.Caching 命名空间,但我希望在对 asp.net 环境的每个请求结束时清除缓存。关键是要确保我不会在单个请求中多次返回数据库获取相同的数据,我不是在为需要在多个请求中存活的数据寻找通用缓存机制。

在 System.Runtime.Caching 的这个特定方面,我似乎真的找不到任何东西。它在 asp.net 上下文中使用什么,有没有办法让它做到这一点?

我意识到我可以在某处使用静态成员,但我不想那样做,因为它不能作为未来的证据。

【问题讨论】:

  • 不幸的是,这不适用于控制台应用程序,但这种行为是我想要的。
  • 将您的缓存抽象为一个接口,然后让每种类型的应用根据需要实现它。
  • 我曾考虑过,我只是希望 System.Runtime.Caching 有一个内置机制来做类似的事情。

标签: asp.net caching


【解决方案1】:

这一切都在您制作的缓存键和有效期中。在您的示例中,您将希望提供一个滑动到期时间(如果该项目未被触及,则在经过一段时间后将其从缓存中删除)。

缓存键应该有一些会话/请求特定的 ID 作为它的一部分。

您只会基于每个请求而不是基于每个用户或每个系统进行缓存,这似乎很奇怪。您可能想探索其他形式的数据共享,例如线程本地存储。

【讨论】:

  • 数据是动态的,以至于完全不适合缓存,但不是动态到无法有效使用单个请求的缓存。我认为 TLS 会受到线程重用的影响,不是这样吗?
  • 可以,但这完全取决于您需要共享数据的原因和方式。 asp.net 有一些安全的实现和用法 - stackoverflow.com/q/8317203/16391
猜你喜欢
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多