【问题标题】:Caching a user control and clearing that cache programmatically以编程方式缓存用户控件并清除该缓存
【发布时间】:2010-07-13 15:27:44
【问题描述】:

我正在尝试缓存用户控件,并且在某些页面上我想缓存单个对象。有多种实现缓存的方法,我的脑子都在想。

我现在看到缓存选项的方式:

您有 PartialCaching 选项,该选项设置为将控件缓存 30 分钟,之后它会自行清除...... >

但我只是找不到合适的方法来向控件添加缓存,并且当我从后端更新控件中使用的对象之一时能够以编程方式清除缓存。

您可以执行 HttpContext.Current.Cache.Insert(),它接受一个键,您可以稍后通过使用 remove 来销毁缓存项...这可以将对象保存在缓存中,但您可以使用像 varyByParam 这样的选项吗?

我的问题归结为两个:

  1. 有没有办法从代码中清除特定用户控件上的缓存?如果可以,可以根据varyby选项来完成吗?
  2. 对象缓存将如何响应使用 Insert() 的登录用户或匿名用户?

编辑: 我正在缓存多个东西....而且我真的很惊讶在哪个选择中提到缓存。 Cache.Insert 可以通过Parameters改变吗?

主要问题是人们从后端编辑内容,这需要触发一个事件来重新实例化或清除所有引用该对象的缓存项。

【问题讨论】:

  • 你到底在缓存什么?看起来你正在做某种数据缓存,这与页面缓存有很大不同(这就是 varyByParam 的内容)。

标签: asp.net caching


【解决方案1】:

您可以使用以下命令从输出缓存中删除项目。

HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");

现在,这只会让您获得您正在寻找的东西的一部分。这将删除该特定页面的所有缓存条目。 MSDN 文档确认了这种行为。

关于您的另一个问题 Cache.Insert() 是跨应用程序的单个缓存存储,不考虑用户身份。

现在我还要更深入地了解您在做什么,只缓存实际数据然后您可以添加/删除特定项目可能是有意义的。但是,如果您的 .control 确实需要大量 CPU 等来处理显示,那么输出缓存的想法就可以了。

【讨论】:

    【解决方案2】:

    使用 System.Web.Caching.Cache 类,您可以缓存项目并为缓存中的项目创建依赖项。如果您使用的是 SQL 服务器,则可以使用 SqlCacheDependency 类根据您的数据库从缓存中清除项目。

    否则,您可以创建自己的 CacheDependency 类派生类,您可以使用它来完成相同的事情。我发现这个 post 描述了这样做。

    【讨论】:

    • 我使用 sqlcachedependancy。它真的很整洁,我的页面会无限期地缓存,直到我指定的表发生变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多