Kentico V9 中的内容缓存依赖项



我想在更新一个自定义表项时更新另一个自定义表的缓存内容。 假设我有两个自定义表:产品和订单。 产品和订单都有列表和编辑页面。

在数据库中,产品上有一个触发器,如果产品发生更改,它会更新订单上的一些数据。

我的方案是,当我更新产品 1(产品类型的项目之一(时,我希望订单(所有订单(缓存刷新并反映在 DB for Order 中所做的更改。这现在没有发生。

内容缓存的全局设置为 10 分钟。但不知何故,需要 20 分钟才能反映变化。不知道为什么。 同样在订单的自定义表中继器的系统设置中 ->缓存分钟数设置为 0 意味着它根本不应该缓存内容,但它仍然如此,所以我在这里不知所措

这种情况的答案是根据 Kentico 文档设置缓存依赖项虚拟密钥。

我的问题是:

  1. 我是否在产品的编辑页面的 Web 部件部分输出缓存依赖项属性上设置所有订单的依赖项键?

例如orders|all

修改任何产品时,是否会刷新为自定义表数据源缓存的所有订单记录?

  1. 或者我在订单中继器的系统设置->内容缓存依赖属性上设置了所有产品的依赖键?

例如products|all

请注意,缓存分钟属性设置为 0,因此理想情况下不应缓存此内容。

  1. 或者将上述键添加到订单的编辑页面的 Web 部件的部分输出依赖项?

另外对于自定义表如何获得正确的虚拟密钥?是吗

products|all

nodes|corportateside|products|all

customtableitem.products|all

或者我需要添加可以在调试>缓存设置中看到的页面虚拟密钥?

我尝试设置所有这些东西,但似乎没有任何效果。 任何帮助将不胜感激。

好的,结果证明这不是缓存问题。

我能够解决我的问题。把答案放在这里供将来参考,我将首先列出我尝试过的内容:

  1. 已安装的修补程序
  2. 添加部分缓存依赖项密钥
  3. 为内容缓存添加缓存依赖项密钥。什么都没用。

通过阅读以下问题的答案得到了一个想法:https://devnet.kentico.com/questions/kentico-8-2-database-caching

当我更新自定义表 A 的数据时,在 A 上的数据库触发器中会更新表 B 中的数据,我需要在站点的缓存中刷新这些数据。

当我从管理员的调试应用程序中尝试"清除缓存"时,它仍然没有更新站点中的数据。此外,我在管理员中的自定义表数据也没有更新。

因此,阅读上述问题中的一个答案,我意识到我需要刷新哈希表才能在管理员中刷新数据,随后在站点中刷新数据。

因此,我将代码添加到 OnAfterSave 事件处理程序中的 CustomTableForm.aspx.cs。在这里,我正在检查当前的自定义表是否是我的表 A,然后刷新 B 的哈希表。

这奏效了。

最新更新