1

我想根据节点的发布日期单独缓存一个节点。旧节点的缓存时间可能比新节点长。我以为我可以单独使用 cache_set 进行缓存,但我意识到默认情况下会缓存节点,因此最好在缓存上设置到期时间。关于如何做到这一点的任何想法?也许是一个钩子?

4

2 回答 2

1

Drupal 本身没有节点缓存。如果您为匿名用户打开了页面缓存,则节点的缓存数据可能分布在三个表中:

  1. 缓存内容

    此表缓存未通过输入过滤器的字段值,例如 file_fields 或选择“纯文本”的文本区域。

  2. 缓存过滤器

    此表缓存富文本字段的过滤值,例如正文或选中“富文本”的 CCK 文本区域。

  3. 缓存页面

    此表缓存匿名访问者看到的整个重新渲染的页面输出

我不知道有一种方法可以准确地规定这些缓存行何时过期,所以你需要创建一个函数

如果要根据自定义规则清除特定节点的所有缓存,可以使用HOOK_cron中的cache_clear_all函数来完成。您首先需要确定哪些节点符合您的缓存删除标准,然后您可以使用带有“cid”通配符参数的 cache_clear_all。类似的东西(这将进入自定义模块中的 HOOK_cron 函数,并要求设置正确的 cron 作业):

<?php
$wildcard = //Your criteria for the cache_content table;
cache_clear_all($wildcard, 'cache_content', TRUE);

$wildcard = //Your criteria for the cache_filter table;
cache_clear_all($wildcard, 'cache_filter', TRUE);

$wildcard = //Your criteria for the cache_page table;
cache_clear_all($wildcard, 'cache_page', TRUE);

我认为这里的重点是覆盖 Drupal 的内置缓存到期非常困难。

于 2013-01-02T22:17:58.507 回答
0

可以试试hook_flush_caches(),但我不完全确定这是否是你要找的……只是一个想法。

另一种可能的途径是drupal_page_cache_header().

HTH。:)

于 2013-01-07T08:37:59.857 回答