【问题标题】:Remove cache created with <cache> tag helper删除使用 <cache> 标签助手创建的缓存
【发布时间】:2019-12-16 14:56:54
【问题描述】:

我在我的 Asp.Net Core 3.1 网站中使用了&lt;cache&gt; 标签助手来缓存页面的某些部分。但是,在某些情况下,我想清除这些缓存条目并让网站重新创建它们。我怎样才能做到这一点?我尝试了this answer 中提到的代码,但无法让它工作。当我注册服务时,应用程序似乎忽略了它,并且没有条目缓存在我的自定义服务中。

【问题讨论】:

  • “清除这些缓存条目并让网站重新创建它们”是什么意思?Cache Tag Helper Attributes 是否可以帮助您完成您想要的?
  • @XueliChen 不,这些属性适用于我事先知道我希望缓存何时过期的情况。通常我不希望这些缓存的部分至少在几天内过期,但有时我会更改数据并希望使缓存无效并要求网站再次呈现该部分。
  • @AlirezaNoori,你有什么解决方案吗?我认为可以通过反射获得集合
  • @sina_Islam 不幸的是没有。如果您有任何发现,请告诉我。
  • @AlirezaNoori,我得到了上述情况的解决方法。您可以查看stackoverflow.com/questions/70272433/…

标签: asp.net asp.net-core caching


【解决方案1】:

这是一种方法:

    private readonly CacheTagHelperMemoryCacheFactory factory;

    public MyClass(CacheTagHelperMemoryCacheFactory factory)
    {
        this.factory = factory;
    }

以后

    (this.factory.Cache as MemoryCache).Compact(1.0);

【讨论】:

  • 这个类是什么?它是标签助手吗?如果是这样,我如何访问底部的代码?让它成为一个功能?我如何获得当前的缓存助手?
  • 这可能是使用 asp.net 核心依赖注入系统创建的任何类。例如,它可能是一个模型类。这个想法是您在构造函数中接受 CacheTagHelperMemoryCacheFactory 并稍后在类中的任何位置使用它。
  • 但如果是这样的话,我怎么能像我在问题中提到的那样在剃须刀中使用它。我正在寻找一种在剃须刀上使用标签处理程序并在必要时使其无效的方法。
  • 如果你的标签助手在 标签内使用,你的标签助手只有在缓存为空时才会被调用。一旦生成内容,它就会存储在缓存中。下次呈现页面时,您的标签不会被调用。内容作为字符串从缓存中获取。使您的标签助手重新渲染的一种方法是清除缓存。我在上面展示了如何做到这一点。但是,如果在 区域内调用它,则不能在标签助手逻辑内执行此操作,因为一旦缓存,您的标签助手将不会被调用。理想情况下,您应该在数据发生更改的地方删除缓存。
猜你喜欢
  • 1970-01-01
  • 2019-03-05
  • 2011-04-14
  • 2019-11-07
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
相关资源
最近更新 更多