/** * Saves tracked cached data and clears expired cache * * @return boolean true if data saved, false if no caches defined */ public static function save() { if (empty(self::$_cache)) { return false; } foreach (self::$_cached_keys as $key => $arg) { if (isset(self::$_storage[$key]) && $arg['track'] == true) { self::_saveCache($key, self::$_storage[$key]); } } self::$_cached_keys = array(); if (self::$_cache_handlers_are_updated == true) { self::$_cache->saveHandlers(self::$_cache_handlers); self::$_cache_handlers_are_updated = false; } // Get tags to clear expired cache if (!empty(self::$_changed_tables)) { $tags = array(); foreach (self::$_changed_tables as $table => $flag) { if (!empty(self::$_cache_handlers[$table])) { $tags = array_merge($tags, array_keys(self::$_cache_handlers[$table])); } } foreach ($tags as $tag) { self::del($tag); } self::$_cache->clear($tags); self::$_changed_tables = array(); } return true; }
/** * Saves tracked cached data and clears expired cache * * @return boolean true if data saved, false if no caches defined */ public static function save() { /** * Hook is being executed before saving cache data to persistent storage and clearing expired cache. * * @param array $changed_tables List of DB tables that were modified at the runtime. * @param array $cached_keys List of registered cache keys. */ fn_set_hook('registry_save_pre', self::$_changed_tables, self::$_cached_keys); if (empty(self::$_cache)) { return false; } foreach (self::$_cached_keys as $key => $arg) { if (isset(self::$_storage[$key]) && $arg['track'] == true) { self::_saveCache($key, self::$_storage[$key]); } } self::$_cached_keys = array(); if (self::$_cache_handlers_are_updated == true) { self::$_cache->saveHandlers(self::$_cache_handlers); self::$_cache_handlers_are_updated = false; } // Get tags to clear expired cache if (!empty(self::$_changed_tables)) { $tags = array(); foreach (self::$_changed_tables as $table => $flag) { if (!empty(self::$_cache_handlers[$table])) { $tags = array_merge($tags, array_keys(self::$_cache_handlers[$table])); } } foreach ($tags as $tag) { self::del($tag); } self::$_cache->clear($tags); self::$_changed_tables = array(); } return true; }