For FileCache, the folder. For Memcache, the server(s).
public static activeStore ( type $ForceMethod = null ) : mixed | ||
$ForceMethod | type | |
return | mixed | Active Store Location |
/** * Reads in known/config servers and adds them to the instance. * * This method is called when the cache object is invoked by the framework * automatically, and needs to configure itself from the values in the global * config file. */ public function autorun() { $Servers = Gdn_Cache::activeStore('memcached'); if (!is_array($Servers)) { $Servers = explode(',', $Servers); } // No servers, cache temporarily offline if (!sizeof($Servers)) { SaveToConfig('Cache.Enabled', false, false); return false; } // Persistent, and already have servers. Short circuit adding. if ($this->Config(Gdn_Cache::CONTAINER_PERSISTENT) && count($this->servers())) { return true; } $Keys = array(Gdn_Cache::CONTAINER_LOCATION, Gdn_Cache::CONTAINER_PERSISTENT, Gdn_Cache::CONTAINER_WEIGHT, Gdn_Cache::CONTAINER_TIMEOUT, Gdn_Cache::CONTAINER_ONLINE, Gdn_Cache::CONTAINER_CALLBACK); foreach ($Servers as $CacheServer) { $CacheServer = explode(' ', $CacheServer); $CacheServer = array_pad($CacheServer, count($Keys), null); $CacheServer = array_combine($Keys, $CacheServer); foreach ($Keys as $KeyName) { $Value = val($KeyName, $CacheServer, null); if (is_null($Value)) { unset($CacheServer[$KeyName]); } } $this->addContainer($CacheServer); } }
/** * Reads in known/config servers and adds them to the instance. * * This method is called when the cache object is invoked by the framework * automatically, and needs to configure itself from the values in the global * config file. */ public function autorun() { $Servers = Gdn_Cache::activeStore('memcache'); if (!is_array($Servers)) { $Servers = explode(',', $Servers); } $Keys = array(Gdn_Cache::CONTAINER_LOCATION, Gdn_Cache::CONTAINER_PERSISTENT, Gdn_Cache::CONTAINER_WEIGHT, Gdn_Cache::CONTAINER_TIMEOUT, Gdn_Cache::CONTAINER_ONLINE, Gdn_Cache::CONTAINER_CALLBACK); foreach ($Servers as $CacheServer) { $CacheServer = explode(' ', $CacheServer); $CacheServer = array_pad($CacheServer, count($Keys), null); $CacheServer = array_combine($Keys, $CacheServer); foreach ($Keys as $KeyName) { $Value = GetValue($KeyName, $CacheServer, null); if (is_null($Value)) { unset($CacheServer[$KeyName]); } } $this->addContainer($CacheServer); } }
/** * Register a temporary server connection failure. * * This method will attempt to temporarily excise the offending server from * the connect roster for a period of time. * * @param string $server */ public function fail($server) { // Use APC? $apc = false; if (C('Garden.Apc', false) && function_exists('apc_fetch')) { $apc = true; } // Get the active cache name $activeCache = Gdn_Cache::activeCache(); $activeCache = ucfirst($activeCache); $activeStoreKey = "Cache.{$activeCache}.Store"; // Get the local store. $localStore = val($activeCache, Gdn_Cache::$stores, null); if (is_null($localStore)) { Gdn_Cache::activeStore(); $localStore = val($activeCache, Gdn_Cache::$stores, null); if (is_null($localStore)) { return false; } } $storeServerName = md5($server); if (!array_key_exists($storeServerName, $localStore)) { return false; } $storeServer =& $localStore[$storeServerName]; $isActive =& $storeServer['Active']; if (!$isActive) { return false; } $fails =& $storeServer['Fails']; $fails++; $active = $isActive ? 'active' : 'inactive'; // Check if we need to deactivate for 5 minutes if ($isActive && $storeServer['Fails'] > 3) { $isActive = false; $storeServer['Delay'] = time() + Gdn_Cache::CACHE_EJECT_DURATION; } // Save Gdn_Cache::$stores[$activeCache] = $localStore; // Save to APC if ($apc) { apc_store($activeStoreKey, $localStore, Gdn_Cache::APC_CACHE_DURATION); } return true; }