public function update() { //clear all view caches, required for 7a36ae58a Kwf_Cache_Simple::getMemcache()->flush(); Kwf_Registry::get('db')->query('TRUNCATE cache_component'); Kwf_Registry::get('db')->query('TRUNCATE cache_component_includes'); }
public function update() { if (Kwf_Cache_Simple::getMemcache()) { Kwf_Cache_Simple::getMemcache()->flush(); } Kwf_Registry::get('db')->query('TRUNCATE cache_component'); Kwf_Registry::get('db')->query('ALTER TABLE `cache_component` ADD `microtime` BIGINT( 14 ) NOT NULL AFTER `value`'); }
protected function _clearCache($options) { $skipOtherServers = isset($options['skipOtherServers']) ? $options['skipOtherServers'] : false; if (!$skipOtherServers) { //namespace used in Kwf_Cache_Simple $mc = Kwf_Cache_Simple::getMemcache(); if ($mc->get(Kwf_Cache_Simple::getUniquePrefix() . 'cache_namespace')) { $mc->increment(Kwf_Cache_Simple::getUniquePrefix() . 'cache_namespace'); } } }
public function memcacheAction() { if (!Kwf_Cache_Simple::$memcacheHost) { echo "memcache not configured for host\n"; exit; } $s = Kwf_Cache_Simple::$memcacheHost . ':' . Kwf_Cache_Simple::$memcachePort; echo "Clear the complete memcache on {$s}?\nThis will effect all other webs using this memcache host.\nAre you REALLY sure you want to do that? [N/y]\n"; $stdin = fopen('php://stdin', 'r'); $input = trim(strtolower(fgets($stdin, 2))); fclose($stdin); if ($input == 'y') { Kwf_Cache_Simple::getMemcache()->flush(); echo "done\n"; exit; } exit(1); }
public function clean() { $be = Kwf_Cache_Simple::getBackend(); if ($be == 'memcache') { $prefix = Kwf_Cache_Simple::getUniquePrefix() . '-media-'; foreach ($this->_getSecondLevelCache()->getIds() as $id) { Kwf_Cache_Simple::getMemcache()->delete($prefix . $id); } } else { if ($be == 'file') { //use secondlevel cache only } else { foreach ($this->_getSecondLevelCache()->getIds() as $id) { Kwf_Cache_Simple::delete('media-' . $id); } } } $this->_getSecondLevelCache()->clean(); }
public function clean() { $be = Kwf_Cache_Simple::getBackend(); if ($be == 'memcache') { $prefix = Kwf_Cache_Simple::getUniquePrefix() . '-media-'; foreach ($this->_getSecondLevelCache()->getIds() as $id) { Kwf_Cache_Simple::getMemcache()->delete($prefix . $id); } } else { if ($be == 'redis') { $prefixLength = strlen(Kwf_Cache_Simple::getRedis()->_prefix('')); $it = null; while ($keys = Kwf_Cache_Simple::getRedis()->scan($it, Kwf_Cache_Simple::getRedis()->_prefix('media:*'))) { foreach ($keys as $k => $i) { $keys[$k] = substr($i, $prefixLength); } Kwf_Cache_Simple::getRedis()->delete($keys); } } else { if ($be == 'file') { //use secondlevel cache only } else { foreach ($this->_getSecondLevelCache()->getIds() as $id) { Kwf_Cache_Simple::delete('media-' . $id); } } } } $this->_getSecondLevelCache()->clean(); $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(Kwf_Config::getValue('mediaCacheDir'), RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST); foreach ($files as $fileinfo) { if ($fileinfo->getFilename() == '.gitignore') { continue; } $todo = $fileinfo->isDir() ? 'rmdir' : 'unlink'; $todo($fileinfo->getRealPath()); } }
public static function _clear() { if (self::getBackend() == 'memcache') { if (!Kwf_Config::getValue('cacheSimpleNamespace')) { //increment namespace $mc = Kwf_Cache_Simple::getMemcache(); if ($mc->get(Kwf_Cache_Simple::$uniquePrefix . 'cache_namespace')) { $mc->increment(Kwf_Cache_Simple::$uniquePrefix . 'cache_namespace'); } } } else { if (self::getBackend() == 'redis') { $prefixLength = strlen(self::getRedis()->_prefix('')); if (!Kwf_Config::getValue('cacheSimpleNamespace')) { $it = null; while ($keys = self::getRedis()->scan($it, self::getRedis()->_prefix('simple:*'))) { foreach ($keys as $k => $i) { $keys[$k] = substr($i, $prefixLength); } self::getRedis()->delete($keys); } } } else { if (self::getBackend() == 'file') { foreach (glob('cache/simple/*') as $i) { unlink($i); } } else { if (self::getBackend() == 'apc' || self::getBackend() == 'apcu') { //those are cleared using their own clear-cache type } else { if (!isset(self::$_zendCache)) { self::getZendCache(); } $r = self::$_zendCache->clean(Zend_Cache::CLEANING_MODE_ALL); } } } } }
/** * Internal function only ment to be used by unit tests * * @internal */ public function _clean() { $be = Kwf_Cache_Simple::getBackend(); if ($be == 'memcache') { return Kwf_Cache_Simple::getMemcache()->flush(); } else { if ($be == 'file') { foreach (glob('cache/view/*') as $i) { unlink($i); } return true; } else { return self::getZendCache()->clean(); } } }
private function _deleteViewCache(array $updates, $dryRun) { $prefixes = array('component_id' => 'viewids:componentid:', 'db_id' => 'viewids:dbid:', 'page_db_id' => 'viewids:pagedbid:', 'component_class' => 'viewids:cls:', 'tag' => 'viewids:tag:', 'expanded_component_id' => 'viewids:recexpandedid:'); if (isset($updates['component_id'])) { $updates[] = array('component_id' => $updates['component_id'], 'type' => 'component'); unset($updates['component_id']); } if (isset($updates['master-component_id'])) { $updates[] = array('component_id' => $updates['master-component_id'], 'type' => 'master'); unset($updates['master-component_id']); } $ret = 0; $checkIncludeIds = array(); foreach ($updates as $update) { $keys = array(); foreach ($update as $key => $value) { if ($key == 'type') { //not in redis query, handled below continue; } if (!isset($prefixes[$key])) { throw new Kwf_Exception("Unsupported updates key '{$key}'"); } if (!is_array($value)) { if ($key == 'expanded_component_id') { if (substr($value, -1) != '%') { throw new Kwf_Exception("'{$key}' must have % at the end"); } } else { if (strpos($value, '%') !== false) { throw new Kwf_Exception("Unsupported % for key '{$key}'"); } } $keys[] = $prefixes[$key] . substr($value, 0, -1); } else { $tempKey = 'temp:' . md5(implode(':', $value)); $args = array($tempKey); foreach ($value as $i) { $args[] = $prefixes[$key] . $i; //key } call_user_func_array(array($this->_redis, 'sUnionStore'), $args); $this->_redis->expire($tempKey, 20); $keys[] = $tempKey; } } if ($update === array()) { //only when executing "clear-view-cache --all" on cli $prefixLength = strlen($this->_redis->_prefix('')); $it = null; $keysToDelete = array(); while ($keys = $this->_redis->scan($it, $this->_redis->_prefix('viewcache:*'))) { foreach ($keys as $i) { $keysToDelete[] = substr($i, $prefixLength); } } $keysToDelete = array_unique($keysToDelete); } else { $keysToDelete = $this->_redis->sInter($keys); } if ($keysToDelete) { foreach ($keysToDelete as $keyIndex => $key) { $key = self::_parseCacheId($key); if (isset($update['type'])) { //not in redis query if ($key['type'] != $update['type']) { unset($keysToDelete[$keyIndex]); } } if ($key['type'] != 'fullPage') { $checkIncludeIds[$key['componentId'] . ':' . $key['type']] = true; } else { //type == fullPage, in this case $key also contains the url which we don't have in the view cache key, so generate cacheId $keysToDelete[$keyIndex] = self::_getCacheId($key['componentId'], $key['renderer'], $key['type'], $key['value']); } } if (Kwf_Cache_Simple::getBackend() == 'memcache') { if (!$dryRun) { foreach ($keysToDelete as $key) { Kwf_Cache_Simple::getMemcache()->delete($key); } } else { $ret = count(Kwf_Cache_Simple::getMemcache()->get($keysToDelete)); } } else { if (!$dryRun) { $ret += $this->_redis->delete($keysToDelete); } else { foreach ($keysToDelete as $i) { $ret += $this->_redis->exists($i); } } } } } // FullPage $fullPageUrls = array(); if (!$dryRun && $checkIncludeIds) { $ids = array_keys($this->_fetchIncludesTree(array_keys($checkIncludeIds))); if ($ids) { $keys = array(); foreach ($ids as $id) { $keys[] = 'viewids:componentid:' . $id; } $fullPageKeysToDelete = array(); foreach (call_user_func_array(array($this->_redis, 'sUnion'), $keys) as $i) { $parts = self::_parseCacheId($i); if ($parts['type'] == 'fullPage') { $fullPageKeysToDelete[] = self::_getCacheId($parts['componentId'], $parts['renderer'], $parts['type'], $parts['value']); if (!isset($fullPageUrls[$parts['domainComponentId']])) { $fullPageUrls[$parts['domainComponentId']] = array(); } $fullPageUrls[$parts['domainComponentId']][$parts['componentId']] = $parts['url']; } } if (Kwf_Cache_Simple::getBackend() == 'memcache') { foreach ($fullPageKeysToDelete as $key) { Kwf_Cache_Simple::getMemcache()->delete($key); } } else { $this->_redis->delete($fullPageKeysToDelete); } } } if ($fullPageUrls) { Kwf_Events_Dispatcher::fireEvent(new Kwf_Component_Event_ViewCache_ClearFullPage(get_class($this), $fullPageUrls)); } return $ret; }