function cache_clear_all in Memcache API and Integration 5
Same name in this branch
- 5 memcache.db.inc \cache_clear_all()
- 5 memcache.inc \cache_clear_all()
Same name and namespace in other branches
- 5.2 memcache.db.inc \cache_clear_all()
- 5.2 memcache.inc \cache_clear_all()
- 6 memcache.db.inc \cache_clear_all()
- 6 memcache.inc \cache_clear_all()
Expire data from the cache. If called without arguments, expirable entries will be cleared from the cache_page table.
Memcache logic is simpler than the core cache because memcache doesn't have a minimum cache lifetime consideration (it handles it internally), and doesn't support wildcards. Wildcard flushes result in the entire table being flushed.
Parameters
$cid: If set, the cache ID to delete. Otherwise, all cache entries that can expire are deleted from the specified table.
$table: If set, the table delete from.
$wildcard: If set to TRUE, the $cid is treated as a substring to match rather than a complete ID. The match is a right hand match. If '*' is given as $cid, the table $table will be emptied.
1 call to cache_clear_all()
- filter_user in ./
memcache-session.inc - Implement hook_user() using a required module's namespace since memcache is not a module and thus can't implement hooks directly.
File
- ./
memcache.db.inc, line 170
Code
function cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE) {
global $user;
if (!isset($cid) && !isset($table)) {
$cid = '*';
$wildcard = TRUE;
$table = 'cache_page';
}
if (empty($cid) || $cid == '*' && $wildcard !== TRUE) {
# don't do anything if cid is unset. this matches the default drupal behavior...
if ($wildcard && $cid != '*') {
if (variable_get('memcache_debug', FALSE)) {
// call watchdog, since you probably didn't want to flush the entire bin.
watchdog('memcache', "illegal wildcard in cache_clear_all - not flushing entire bin. table: {$table}. cid: {$cid}", WATCHDOG_WARNING);
}
}
}
else {
if ($cid == '*' || $wildcard === TRUE) {
dmemcache_flush($table);
}
else {
dmemcache_delete($cid, $table);
}
}
if (empty($cid)) {
if (variable_get('cache_lifetime', 0)) {
// We store the time in the current user's $user->cache variable which
// will be saved into the sessions table by sess_write(). We then
// simulate that the cache was flushed for this user by not returning
// cached data that was cached before the timestamp.
$user->cache = $_SERVER['REQUEST_TIME'];
$cache_flush = variable_get('cache_flush', 0);
if ($cache_flush == 0) {
// This is the first request to clear the cache, start a timer.
variable_set('cache_flush', $_SERVER['REQUEST_TIME']);
}
else {
if ($_SERVER['REQUEST_TIME'] > $cache_flush + variable_get('cache_lifetime', 0)) {
// Clear the cache for everyone, cache_flush_delay seconds have
// passed since the first request to clear the cache.
db_query("DELETE FROM {" . $table . "} WHERE expire != %d AND expire < %d", CACHE_PERMANENT, $_SERVER['REQUEST_TIME']);
variable_set('cache_flush', 0);
}
}
}
else {
// No minimum cache lifetime, flush all temporary cache entries now.
db_query("DELETE FROM {" . $table . "} WHERE expire != %d AND expire < %d", CACHE_PERMANENT, $_SERVER['REQUEST_TIME']);
}
}
else {
if ($wildcard) {
if ($cid == '*') {
db_query("DELETE FROM {" . $table . "}");
}
else {
db_query("DELETE FROM {" . $table . "} WHERE cid LIKE '%s%%'", $cid);
}
}
else {
db_query("DELETE FROM {" . $table . "} WHERE cid = '%s'", $cid);
}
}
}