老葛的Drupal培训班 Think in Drupal
用来清除缓存数据的主函数就是includes/cache.inc中的cache_clear_all()。函数的签名如下:
function cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE) {...}
参数$cid和$table的含义,与cache_set()和cache_get()中的一样。而参数$wildcard是用来指示是否对$cid采用通配符的形式进行处理,也就是说,把$cid作为一个子字符串,任何从左边匹配的条目将被清除。下面是一些例子。
清除cache表中的特定条目foo:bar:
$cid = 'foo:bar';
cache_clear_all($cid, 'cache');
清除cache表中的由foo模块设置的(假定,$cid都采用foo:前缀)任何过期的条目:
$cid = 'foo:'; // Will match cache keys foo:bar, foo:baz, etc.
cache_clear_all($cid, 'cache', TRUE);
在前面的例子中,实际运行的数据库查询如下:
db_query("DELETE FROM {". $table ."} WHERE cid LIKE '%s%%'", $cid);
如果foo模块将它的数据保存在了它自己的cache_foo表中,那么需要对该表进行声明,这样cache_clear_all()就知道清除哪个表了:
$cid = 'foo:bar';
cache_clear_all($cid, 'cache_foo');
如果你想完全清空一个缓存表,那么可以把$cid设为*,把$wildcard设为TRUE。这个例子将清空整个cache_foo表:
cache_clear_all('*', 'cache_foo', TRUE);
清除页面和区块缓存(例如,cache_page和cache_block表)的任何过期条目:
cache_clear_all();