我正在处理一个启用了页面缓存的站点。
我希望任何给定节点的页面缓存在该节点被更改时失效。有很多关于缓存标记的例子,但是我还没有搞清楚页面缓存和缓存标记之间的关系。
我有一个开始发布的节点。然后我取消发布,然后再次发布。当我第二次发布它时,页面缓存仍然将它视为未发布的。它会这样做,直到我清除整个(页面)缓存。
当我更新已发布的节点时,cache_page
条目似乎被更新了,但是每当节点从未发布到发布时,页面缓存条目就不会跟随。
我尝试过实现hook_entity_update
并做了一个Cache::invalidateTags(['node:19']);
,但没有产生任何影响。
是否可以使用缓存标记来使页缓存条目失效?
发布于 2020-09-01 04:32:17
页缓存只是缓存的值。
缓存标记是附加到缓存值的标记(稍微简化一点)。这将告诉Drupal哪些缓存值与哪些缓存标记相关。当缓存标记失效时,所有具有无效缓存标记的缓存值也将失效。您可以在Drupal文档页面上找到有关缓存标签的更多信息。标题是:
缓存标记提供了一种声明性的方式来跟踪哪些缓存项依赖于Drupal管理的某些数据。
因此,回答您的问题,是的,它们是完全相关的,您可以(而且应该)使用缓存标记使页面缓存条目失效。因为,如前所述,缓存标记跟踪内容和缓存依赖项,因此,当内容(或缓存项的源数据)发生更改时,可以使缓存项无效。
然而,这可能是一个棘手的问题。例如,节点视图页的页缓存项总是与缓存标记node:[nid]
相关联。更新节点时,该缓存标记将失效,从而使该节点的视图页的页缓存失效。显示节点列表的视图不与每个节点的缓存标记关联。块是其他显示元素,可能与这种标记无关。因此,您需要知道要使哪个缓存标记失效。
好消息是Drupal负责最常见的病例,所以您不必关心。通常,您只需要在开发自定义代码时处理缓存标记。
在您的情况下,您可能正在进入另一个缓存(浏览器缓存?反向代理缓存?)。
https://drupal.stackexchange.com/questions/296396
复制相似问题