You are here

function cache_clear_all in Memcache API and Integration 5

Same name in this branch
  1. 5 memcache.db.inc \cache_clear_all()
  2. 5 memcache.inc \cache_clear_all()
Same name and namespace in other branches
  1. 5.2 memcache.db.inc \cache_clear_all()
  2. 5.2 memcache.inc \cache_clear_all()
  3. 6 memcache.db.inc \cache_clear_all()
  4. 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 to 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.inc, line 89

Code

function cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE) {

  // If cid and table are not set, we should flush the cache_page table.
  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);
    }
  }
}