cid = $cid; $cache->data = is_object($data) ? memcache_clone($data) : $data; $cache->created = $created; $cache->expire = $expire; $cache->headers = $headers; // Save to memcache if ($expire == CACHE_TEMPORARY) { $expire = variable_get('cache_lifetime', 2591999); } dmemcache_set($cid, $cache, $expire, $table); } /** * * Expire data from the cache. If called without arguments, expirable * entries will be cleared from the cache_page and cache_block tables. * * @param $cid * If set, the cache ID to delete. Otherwise, all cache entries that can * expire are deleted. * * @param $table * If set, the table $table to delete from. Mandatory * argument if $cid is set. * * @param $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. */ function cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE) { // Memcache logic is simpler because memcache doesn't have a minimum cache // lifetime consideration (it handles it internally), and doesn't support // wildcards. $bin = empty($table) ? 'cache_page' : $table; 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); } } /** * Provide a substitute clone() function for PHP4. This is a copy of drupal_clone * because common.inc isn't included early enough in the bootstrap process to * be able to depend on drupal_clone. */ function memcache_clone($object) { return version_compare(phpversion(), '5.0') < 0 ? $object : clone($object); }