Kentico V9 中的内容缓存依赖项
Content Cache dependency in Kentico V9
我想在更新另一个自定义 table 项目时更新一个自定义 table 的缓存内容。
假设我有两个自定义表:产品和订单。
产品和订单都有列表和编辑页面。
在数据库中,产品上有一个触发器,如果产品发生变化,它会更新订单上的一些数据。
我的情况是,当我更新产品 1(产品类型的项目之一)时,我希望订单(所有订单)缓存刷新并反映在数据库中对订单所做的更改。现在还没有发生这种情况。
内容缓存的全局设置为 10 分钟。但不知何故需要 20 分钟才能反映出变化。不知道为什么。
同样在 Orders 的 CustomTableRepeater 的系统设置->缓存分钟数设置为 0 意味着它根本不应该缓存内容但它仍然如此我在这里不知所措
这个场景的答案是根据 Kentico 文档设置缓存依赖虚拟键。
我的问题是:
- 我是否在产品的编辑页面的 Web 部件部分输出缓存依赖项上设置所有订单的依赖键 属性?
例如orders|all
是否会在修改任何产品时刷新为自定义 table 数据源缓存的所有订单记录?
- 或者我在订单的转发器的系统设置->内容缓存依赖项上设置所有产品的依赖键属性?
例如products|all
请注意缓存分钟 属性 设置为 0,因此理想情况下不应缓存此内容。
- 或者在Order's Edit page's webpart's partial output dependency中添加上面的key?
也用于自定义 table 如何获得正确的虚拟密钥?是吗
products|all
或
nodes|corportateside|products|all
或
customtableitem.products|all
或者我需要添加可以在调试->缓存设置中看到的页面虚拟键?
我已经尝试设置所有这些东西,但似乎没有任何效果。
非常感谢任何帮助。
好的,结果证明不是缓存问题。
我能够解决我的问题。将答案放在这里以供将来参考我将首先列出我尝试过的内容:
- 已安装修补程序
- 添加部分缓存依赖键
- 为内容缓存添加缓存依赖键。没有任何效果。
通过阅读这个问题的答案得到了一个想法:https://devnet.kentico.com/questions/kentico-8-2-database-caching
当我更新自定义Table A 的数据时,A 上的数据库触发器会更新 table B 中的数据,我需要在站点缓存中刷新这些数据。
当我尝试 'Clear Cache' 从管理员调试应用程序时,它仍然没有更新站点中的数据。我在管理中的自定义 Table 数据也没有得到更新。
所以阅读上述问题的一个答案,我意识到我需要刷新 Hashtables 才能在管理中刷新数据,随后在网站中刷新。
所以我在 OnAfterSave 事件处理程序中向 CustomTableForm.aspx.cs 添加了代码。这里我检查当前的 CustomTable 是否是我的 table A,然后刷新 B.
的 hashtables
这有效。
我想在更新另一个自定义 table 项目时更新一个自定义 table 的缓存内容。 假设我有两个自定义表:产品和订单。 产品和订单都有列表和编辑页面。
在数据库中,产品上有一个触发器,如果产品发生变化,它会更新订单上的一些数据。
我的情况是,当我更新产品 1(产品类型的项目之一)时,我希望订单(所有订单)缓存刷新并反映在数据库中对订单所做的更改。现在还没有发生这种情况。
内容缓存的全局设置为 10 分钟。但不知何故需要 20 分钟才能反映出变化。不知道为什么。 同样在 Orders 的 CustomTableRepeater 的系统设置->缓存分钟数设置为 0 意味着它根本不应该缓存内容但它仍然如此我在这里不知所措
这个场景的答案是根据 Kentico 文档设置缓存依赖虚拟键。
我的问题是:
- 我是否在产品的编辑页面的 Web 部件部分输出缓存依赖项上设置所有订单的依赖键 属性?
例如orders|all
是否会在修改任何产品时刷新为自定义 table 数据源缓存的所有订单记录?
- 或者我在订单的转发器的系统设置->内容缓存依赖项上设置所有产品的依赖键属性?
例如products|all
请注意缓存分钟 属性 设置为 0,因此理想情况下不应缓存此内容。
- 或者在Order's Edit page's webpart's partial output dependency中添加上面的key?
也用于自定义 table 如何获得正确的虚拟密钥?是吗
products|all
或
nodes|corportateside|products|all
或
customtableitem.products|all
或者我需要添加可以在调试->缓存设置中看到的页面虚拟键?
我已经尝试设置所有这些东西,但似乎没有任何效果。 非常感谢任何帮助。
好的,结果证明不是缓存问题。
我能够解决我的问题。将答案放在这里以供将来参考我将首先列出我尝试过的内容:
- 已安装修补程序
- 添加部分缓存依赖键
- 为内容缓存添加缓存依赖键。没有任何效果。
通过阅读这个问题的答案得到了一个想法:https://devnet.kentico.com/questions/kentico-8-2-database-caching
当我更新自定义Table A 的数据时,A 上的数据库触发器会更新 table B 中的数据,我需要在站点缓存中刷新这些数据。
当我尝试 'Clear Cache' 从管理员调试应用程序时,它仍然没有更新站点中的数据。我在管理中的自定义 Table 数据也没有得到更新。
所以阅读上述问题的一个答案,我意识到我需要刷新 Hashtables 才能在管理中刷新数据,随后在网站中刷新。
所以我在 OnAfterSave 事件处理程序中向 CustomTableForm.aspx.cs 添加了代码。这里我检查当前的 CustomTable 是否是我的 table A,然后刷新 B.
的 hashtables这有效。