summaryrefslogtreecommitdiff
path: root/system/libraries/Cache.php
diff options
context:
space:
mode:
Diffstat (limited to 'system/libraries/Cache.php')
-rw-r--r--system/libraries/Cache.php145
1 files changed, 54 insertions, 91 deletions
diff --git a/system/libraries/Cache.php b/system/libraries/Cache.php
index 8a02a905..2ed344fa 100644
--- a/system/libraries/Cache.php
+++ b/system/libraries/Cache.php
@@ -4,20 +4,17 @@
* resources. Caches are identified by a unique string. Tagging of caches is
* also supported, and caches can be found and deleted by id or tag.
*
- * $Id: Cache.php 4321 2009-05-04 01:39:44Z kiall $
+ * $Id: Cache.php 4605 2009-09-14 17:22:21Z kiall $
*
* @package Cache
* @author Kohana Team
- * @copyright (c) 2007-2008 Kohana Team
- * @license http://kohanaphp.com/license.html
+ * @copyright (c) 2007-2009 Kohana Team
+ * @license http://kohanaphp.com/license
*/
class Cache_Core {
protected static $instances = array();
- // For garbage collection
- protected static $loaded;
-
// Configuration
protected $config;
@@ -55,7 +52,7 @@ class Cache_Core {
// Test the config group name
if (($config = Kohana::config('cache.'.$config)) === NULL)
- throw new Kohana_Exception('cache.undefined_group', $name);
+ throw new Kohana_Exception('The :group: group is not defined in your configuration.', array(':group:' => $name));
}
if (is_array($config))
@@ -77,132 +74,98 @@ class Cache_Core {
// Load the driver
if ( ! Kohana::auto_load($driver))
- throw new Kohana_Exception('core.driver_not_found', $this->config['driver'], get_class($this));
+ throw new Kohana_Exception('The :driver: driver for the :class: library could not be found',
+ array(':driver:' => $this->config['driver'], ':class:' => get_class($this)));
// Initialize the driver
$this->driver = new $driver($this->config['params']);
// Validate the driver
if ( ! ($this->driver instanceof Cache_Driver))
- throw new Kohana_Exception('core.driver_implements', $this->config['driver'], get_class($this), 'Cache_Driver');
-
- Kohana::log('debug', 'Cache Library initialized');
-
- if (Cache::$loaded !== TRUE)
- {
- $this->config['requests'] = (int) $this->config['requests'];
-
- if ($this->config['requests'] > 0 AND mt_rand(1, $this->config['requests']) === 1)
- {
- // Do garbage collection
- $this->driver->delete_expired();
+ throw new Kohana_Exception('The :driver: driver for the :library: library must implement the :interface: interface',
+ array(':driver:' => $this->config['driver'], ':library:' => get_class($this), ':interface:' => 'Cache_Driver'));
- Kohana::log('debug', 'Cache: Expired caches deleted.');
- }
-
- // Cache has been loaded once
- Cache::$loaded = TRUE;
- }
+ Kohana_Log::add('debug', 'Cache Library initialized');
}
/**
- * Fetches a cache by id. NULL is returned when a cache item is not found.
- *
- * @param string cache id
- * @return mixed cached data or NULL
+ * Set cache items
*/
- public function get($id)
+ public function set($key, $value = NULL, $tags = NULL, $lifetime = NULL)
{
- // Sanitize the ID
- $id = $this->sanitize_id($id);
+ if ($lifetime === NULL)
+ {
+ $lifetime = $this->config['lifetime'];
+ }
- return $this->driver->get($id);
- }
+ if ( ! is_array($key))
+ {
+ $key = array($key => $value);
+ }
- /**
- * Fetches all of the caches for a given tag. An empty array will be
- * returned when no matching caches are found.
- *
- * @param string cache tag
- * @return array all cache items matching the tag
- */
- public function find($tag)
- {
- return $this->driver->find($tag);
+ return $this->driver->set($key, $tags, $lifetime);
}
/**
- * Set a cache item by id. Tags may also be added and a custom lifetime
- * can be set. Non-string data is automatically serialized.
- *
- * @param string unique cache id
- * @param mixed data to cache
- * @param array|string tags for this item
- * @param integer number of seconds until the cache expires
- * @return boolean
+ * Get a cache items by key
*/
- function set($id, $data, $tags = NULL, $lifetime = NULL)
+ public function get($keys)
{
- if (is_resource($data))
- throw new Kohana_Exception('cache.resources');
-
- // Sanitize the ID
- $id = $this->sanitize_id($id);
+ $single = FALSE;
- if ($lifetime === NULL)
+ if ( ! is_array($keys))
{
- // Get the default lifetime
- $lifetime = $this->config['lifetime'];
+ $keys = array($keys);
+ $single = TRUE;
}
- return $this->driver->set($id, $data, (array) $tags, $lifetime);
+ return $this->driver->get($keys, $single);
}
/**
- * Delete a cache item by id.
- *
- * @param string cache id
- * @return boolean
+ * Get cache items by tags
*/
- public function delete($id)
+ public function get_tag($tags)
{
- // Sanitize the ID
- $id = $this->sanitize_id($id);
+ if ( ! is_array($tags))
+ {
+ $tags = array($tags);
+ }
- return $this->driver->delete($id);
+ return $this->driver->get_tag($tags);
}
/**
- * Delete all cache items with a given tag.
- *
- * @param string cache tag name
- * @return boolean
+ * Delete cache item by key
*/
- public function delete_tag($tag)
+ public function delete($keys)
{
- return $this->driver->delete($tag, TRUE);
+ if ( ! is_array($keys))
+ {
+ $keys = array($keys);
+ }
+
+ return $this->driver->delete($keys);
}
/**
- * Delete ALL cache items items.
- *
- * @return boolean
+ * Delete cache items by tag
*/
- public function delete_all()
+ public function delete_tag($tags)
{
- return $this->driver->delete(TRUE);
+ if ( ! is_array($tags))
+ {
+ $tags = array($tags);
+ }
+
+ return $this->driver->delete_tag($tags);
}
/**
- * Replaces troublesome characters with underscores.
- *
- * @param string cache id
- * @return string
+ * Empty the cache
*/
- protected function sanitize_id($id)
+ public function delete_all()
{
- // Change slashes and spaces to underscores
- return str_replace(array('/', '\\', ' '), '_', $id);
+ return $this->driver->delete_all();
}
-
-} // End Cache
+} // End Cache Library \ No newline at end of file