pictcode / lib / Cake / Cache / CacheEngine.php @ 995bd018
履歴 | 表示 | アノテート | ダウンロード (4.678 KB)
| 1 | 635eef61 | spyder1211 | <?php
 | 
      
|---|---|---|---|
| 2 | /**
 | 
      ||
| 3 |  * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 | 
      ||
| 4 |  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | 
      ||
| 5 |  *
 | 
      ||
| 6 |  * Licensed under The MIT License
 | 
      ||
| 7 |  * For full copyright and license information, please see the LICENSE.txt
 | 
      ||
| 8 |  * Redistributions of files must retain the above copyright notice.
 | 
      ||
| 9 |  *
 | 
      ||
| 10 |  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | 
      ||
| 11 |  * @link          http://cakephp.org CakePHP(tm) Project
 | 
      ||
| 12 |  * @package       Cake.Cache
 | 
      ||
| 13 |  * @since         CakePHP(tm) v 1.2.0.4933
 | 
      ||
| 14 |  * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 | 
      ||
| 15 |  */
 | 
      ||
| 16 | |||
| 17 | /**
 | 
      ||
| 18 |  * Storage engine for CakePHP caching
 | 
      ||
| 19 |  *
 | 
      ||
| 20 |  * @package       Cake.Cache
 | 
      ||
| 21 |  */
 | 
      ||
| 22 | abstract class CacheEngine {  | 
      ||
| 23 | |||
| 24 | /**
 | 
      ||
| 25 |  * Settings of current engine instance
 | 
      ||
| 26 |  *
 | 
      ||
| 27 |  * @var array
 | 
      ||
| 28 |  */
 | 
      ||
| 29 | public $settings = array();  | 
      ||
| 30 | |||
| 31 | /**
 | 
      ||
| 32 |  * Contains the compiled string with all groups
 | 
      ||
| 33 |  * prefixes to be prepended to every key in this cache engine
 | 
      ||
| 34 |  *
 | 
      ||
| 35 |  * @var string
 | 
      ||
| 36 |  */
 | 
      ||
| 37 | protected $_groupPrefix = null;  | 
      ||
| 38 | |||
| 39 | /**
 | 
      ||
| 40 |  * Initialize the cache engine
 | 
      ||
| 41 |  *
 | 
      ||
| 42 |  * Called automatically by the cache frontend
 | 
      ||
| 43 |  *
 | 
      ||
| 44 |  * @param array $settings Associative array of parameters for the engine
 | 
      ||
| 45 |  * @return bool True if the engine has been successfully initialized, false if not
 | 
      ||
| 46 |  */
 | 
      ||
| 47 | public function init($settings = array()) {  | 
      ||
| 48 | $settings += $this->settings + array(  | 
      ||
| 49 | 'prefix' => 'cake_',  | 
      ||
| 50 | 'duration' => 3600,  | 
      ||
| 51 | 'probability' => 100,  | 
      ||
| 52 | 'groups' => array()  | 
      ||
| 53 | );  | 
      ||
| 54 | $this->settings = $settings;  | 
      ||
| 55 | if (!empty($this->settings['groups'])) {  | 
      ||
| 56 | sort($this->settings['groups']);  | 
      ||
| 57 | $this->_groupPrefix = str_repeat('%s_', count($this->settings['groups']));  | 
      ||
| 58 | }  | 
      ||
| 59 | if (!is_numeric($this->settings['duration'])) {  | 
      ||
| 60 | $this->settings['duration'] = strtotime($this->settings['duration']) - time();  | 
      ||
| 61 | }  | 
      ||
| 62 | return true;  | 
      ||
| 63 | }  | 
      ||
| 64 | |||
| 65 | /**
 | 
      ||
| 66 |  * Garbage collection
 | 
      ||
| 67 |  *
 | 
      ||
| 68 |  * Permanently remove all expired and deleted data
 | 
      ||
| 69 |  *
 | 
      ||
| 70 |  * @param int $expires [optional] An expires timestamp, invalidating all data before.
 | 
      ||
| 71 |  * @return void
 | 
      ||
| 72 |  */
 | 
      ||
| 73 | public function gc($expires = null) {  | 
      ||
| 74 | }  | 
      ||
| 75 | |||
| 76 | /**
 | 
      ||
| 77 |  * Write value for a key into cache
 | 
      ||
| 78 |  *
 | 
      ||
| 79 |  * @param string $key Identifier for the data
 | 
      ||
| 80 |  * @param mixed $value Data to be cached
 | 
      ||
| 81 |  * @param int $duration How long to cache for.
 | 
      ||
| 82 |  * @return bool True if the data was successfully cached, false on failure
 | 
      ||
| 83 |  */
 | 
      ||
| 84 | abstract public function write($key, $value, $duration);  | 
      ||
| 85 | |||
| 86 | /**
 | 
      ||
| 87 |  * Read a key from the cache
 | 
      ||
| 88 |  *
 | 
      ||
| 89 |  * @param string $key Identifier for the data
 | 
      ||
| 90 |  * @return mixed The cached data, or false if the data doesn't exist, has expired, or if there was an error fetching it
 | 
      ||
| 91 |  */
 | 
      ||
| 92 | abstract public function read($key);  | 
      ||
| 93 | |||
| 94 | /**
 | 
      ||
| 95 |  * Increment a number under the key and return incremented value
 | 
      ||
| 96 |  *
 | 
      ||
| 97 |  * @param string $key Identifier for the data
 | 
      ||
| 98 |  * @param int $offset How much to add
 | 
      ||
| 99 |  * @return New incremented value, false otherwise
 | 
      ||
| 100 |  */
 | 
      ||
| 101 | abstract public function increment($key, $offset = 1);  | 
      ||
| 102 | |||
| 103 | /**
 | 
      ||
| 104 |  * Decrement a number under the key and return decremented value
 | 
      ||
| 105 |  *
 | 
      ||
| 106 |  * @param string $key Identifier for the data
 | 
      ||
| 107 |  * @param int $offset How much to subtract
 | 
      ||
| 108 |  * @return New incremented value, false otherwise
 | 
      ||
| 109 |  */
 | 
      ||
| 110 | abstract public function decrement($key, $offset = 1);  | 
      ||
| 111 | |||
| 112 | /**
 | 
      ||
| 113 |  * Delete a key from the cache
 | 
      ||
| 114 |  *
 | 
      ||
| 115 |  * @param string $key Identifier for the data
 | 
      ||
| 116 |  * @return bool True if the value was successfully deleted, false if it didn't exist or couldn't be removed
 | 
      ||
| 117 |  */
 | 
      ||
| 118 | abstract public function delete($key);  | 
      ||
| 119 | |||
| 120 | /**
 | 
      ||
| 121 |  * Delete all keys from the cache
 | 
      ||
| 122 |  *
 | 
      ||
| 123 |  * @param bool $check if true will check expiration, otherwise delete all
 | 
      ||
| 124 |  * @return bool True if the cache was successfully cleared, false otherwise
 | 
      ||
| 125 |  */
 | 
      ||
| 126 | abstract public function clear($check);  | 
      ||
| 127 | |||
| 128 | /**
 | 
      ||
| 129 |  * Clears all values belonging to a group. Is up to the implementing engine
 | 
      ||
| 130 |  * to decide whether actually delete the keys or just simulate it to achieve
 | 
      ||
| 131 |  * the same result.
 | 
      ||
| 132 |  *
 | 
      ||
| 133 |  * @param string $group name of the group to be cleared
 | 
      ||
| 134 |  * @return bool
 | 
      ||
| 135 |  */
 | 
      ||
| 136 | public function clearGroup($group) {  | 
      ||
| 137 | return false;  | 
      ||
| 138 | }  | 
      ||
| 139 | |||
| 140 | /**
 | 
      ||
| 141 |  * Does whatever initialization for each group is required
 | 
      ||
| 142 |  * and returns the `group value` for each of them, this is
 | 
      ||
| 143 |  * the token representing each group in the cache key
 | 
      ||
| 144 |  *
 | 
      ||
| 145 |  * @return array
 | 
      ||
| 146 |  */
 | 
      ||
| 147 | public function groups() {  | 
      ||
| 148 | return $this->settings['groups'];  | 
      ||
| 149 | }  | 
      ||
| 150 | |||
| 151 | /**
 | 
      ||
| 152 |  * Cache Engine settings
 | 
      ||
| 153 |  *
 | 
      ||
| 154 |  * @return array settings
 | 
      ||
| 155 |  */
 | 
      ||
| 156 | public function settings() {  | 
      ||
| 157 | return $this->settings;  | 
      ||
| 158 | }  | 
      ||
| 159 | |||
| 160 | /**
 | 
      ||
| 161 |  * Generates a safe key for use with cache engine storage engines.
 | 
      ||
| 162 |  *
 | 
      ||
| 163 |  * @param string $key the key passed over
 | 
      ||
| 164 |  * @return mixed string $key or false
 | 
      ||
| 165 |  */
 | 
      ||
| 166 | public function key($key) {  | 
      ||
| 167 | if (empty($key)) {  | 
      ||
| 168 | return false;  | 
      ||
| 169 | }  | 
      ||
| 170 | |||
| 171 | $prefix = '';  | 
      ||
| 172 | if (!empty($this->_groupPrefix)) {  | 
      ||
| 173 | $prefix = vsprintf($this->_groupPrefix, $this->groups());  | 
      ||
| 174 | }  | 
      ||
| 175 | |||
| 176 | $key = preg_replace('/[\s]+/', '_', strtolower(trim(str_replace(array(DS, '/', '.'), '_', strval($key)))));  | 
      ||
| 177 | return $prefix . $key;  | 
      ||
| 178 | }  | 
      ||
| 179 | |||
| 180 | }  |