2 // This file is part of Moodle - http://moodle.org/
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
18 * Cache store - base class
20 * This file is part of Moodle's cache API, affectionately called MUC.
21 * It contains the components that are required in order to use caching.
25 * @copyright 2012 Sam Hemelryk
26 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
29 defined('MOODLE_INTERNAL') || die();
32 * Cache store interface.
34 * This interface defines the static methods that must be implemented by every cache store plugin.
35 * To ensure plugins implement this class the abstract cache_store class implements this interface.
39 * @copyright 2012 Sam Hemelryk
40 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
42 interface cache_store_interface {
44 * Static method to check if the store requirements are met.
46 * @return bool True if the stores software/hardware requirements have been met and it can be used. False otherwise.
48 public static function are_requirements_met();
51 * Static method to check if a store is usable with the given mode.
53 * @param int $mode One of cache_store::MODE_*
55 public static function is_supported_mode($mode);
58 * Returns the supported features as a binary flag.
60 * @param array $configuration The configuration of a store to consider specifically.
61 * @return int The supported features.
63 public static function get_supported_features(array $configuration = array());
66 * Returns the supported modes as a binary flag.
68 * @param array $configuration The configuration of a store to consider specifically.
69 * @return int The supported modes.
71 public static function get_supported_modes(array $configuration = array());
74 * Generates an instance of the cache store that can be used for testing.
76 * Returns an instance of the cache store, or false if one cannot be created.
78 * @param cache_definition $definition
79 * @return cache_store|false
81 public static function initialise_test_instance(cache_definition $definition);
85 * Abstract cache store class.
87 * All cache store plugins must extend this base class.
88 * It lays down the foundation for what is required of a cache store plugin.
93 * @copyright 2012 Sam Hemelryk
94 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
96 abstract class cache_store implements cache_store_interface {
98 // Constants for features a cache store can support
101 * Supports multi-part keys
103 const SUPPORTS_MULTIPLE_IDENTIFIERS = 1;
105 * Ensures data remains in the cache once set.
107 const SUPPORTS_DATA_GUARANTEE = 2;
109 * Supports a native ttl system.
111 const SUPPORTS_NATIVE_TTL = 4;
113 // Constants for the modes of a cache store
116 * Application caches. These are shared caches.
118 const MODE_APPLICATION = 1;
120 * Session caches. Just access to the PHP session.
122 const MODE_SESSION = 2;
124 * Request caches. Static caches really.
126 const MODE_REQUEST = 4;
129 * Constructs an instance of the cache store.
131 * This method should not create connections or perform and processing, it should be used
133 * @param string $name The name of the cache store
134 * @param array $configuration The configuration for this store instance.
136 abstract public function __construct($name, array $configuration = array());
139 * Returns the name of this store instance.
142 abstract public function my_name();
145 * Initialises a new instance of the cache store given the definition the instance is to be used for.
147 * This function should prepare any given connections etc.
149 * @param cache_definition $definition
151 abstract public function initialise(cache_definition $definition);
154 * Returns true if this cache store instance has been initialised.
157 abstract public function is_initialised();
160 * Returns true if this cache store instance is ready to use.
163 abstract public function is_ready();
166 * Retrieves an item from the cache store given its key.
168 * @param string $key The key to retrieve
169 * @return mixed The data that was associated with the key, or false if the key did not exist.
171 abstract public function get($key);
174 * Retrieves several items from the cache store in a single transaction.
176 * If not all of the items are available in the cache then the data value for those that are missing will be set to false.
178 * @param array $keys The array of keys to retrieve
179 * @return array An array of items from the cache. There will be an item for each key, those that were not in the store will
182 abstract public function get_many($keys);
185 * Sets an item in the cache given its key and data value.
187 * @param string $key The key to use.
188 * @param mixed $data The data to set.
189 * @return bool True if the operation was a success false otherwise.
191 abstract public function set($key, $data);
194 * Sets many items in the cache in a single transaction.
196 * @param array $keyvaluearray An array of key value pairs. Each item in the array will be an associative array with two
197 * keys, 'key' and 'value'.
198 * @return int The number of items successfully set. It is up to the developer to check this matches the number of items
199 * sent ... if they care that is.
201 abstract public function set_many(array $keyvaluearray);
204 * Deletes an item from the cache store.
206 * @param string $key The key to delete.
207 * @return bool Returns true if the operation was a success, false otherwise.
209 abstract public function delete($key);
212 * Deletes several keys from the cache in a single action.
214 * @param array $keys The keys to delete
215 * @return int The number of items successfully deleted.
217 abstract public function delete_many(array $keys);
220 * Purges the cache deleting all items within it.
222 * @return boolean True on success. False otherwise.
224 abstract public function purge();
227 * Performs any necessary clean up when the store instance is being deleted.
229 abstract public function cleanup();
232 * Returns true if the user can add an instance of the store plugin.
236 public static function can_add_instance() {
241 * Returns true if the store instance guarantees data.
245 public function supports_data_guarantee() {
246 return $this::get_supported_features() & self::SUPPORTS_DATA_GUARANTEE;
250 * Returns true if the store instance supports multiple identifiers.
254 public function supports_multiple_identifiers() {
255 return $this::get_supported_features() & self::SUPPORTS_MULTIPLE_IDENTIFIERS;
259 * Returns true if the store instance supports native ttl.
263 public function supports_native_ttl() {
264 return $this::supports_data_guarantee() & self::SUPPORTS_NATIVE_TTL;