diff options
Diffstat (limited to 'kohana/libraries/drivers/Cache/Memcache.php')
-rw-r--r-- | kohana/libraries/drivers/Cache/Memcache.php | 65 |
1 files changed, 28 insertions, 37 deletions
diff --git a/kohana/libraries/drivers/Cache/Memcache.php b/kohana/libraries/drivers/Cache/Memcache.php index f443b997..acd4c850 100644 --- a/kohana/libraries/drivers/Cache/Memcache.php +++ b/kohana/libraries/drivers/Cache/Memcache.php @@ -17,14 +17,11 @@ class Cache_Memcache_Driver implements Cache_Driver { protected $backend; protected $flags; - // The persistent lifetime value for expirations of 0 - protected $persistent_lifetime; - // Tags array - protected $tags; + protected static $tags; // Have the tags been changed? - protected $tags_changed = FALSE; + protected static $tags_changed = FALSE; public function __construct() { @@ -46,34 +43,34 @@ class Cache_Memcache_Driver implements Cache_Driver { or Kohana::log('error', 'Cache: Connection failed: '.$server['host']); } - // Set "persistent lifetime" value to one year - $this->persistent_lifetime = strtotime('now +1 year'); - // Load tags - $this->tags = $this->backend->get(self::TAGS_KEY); + self::$tags = $this->backend->get(self::TAGS_KEY); - if ( ! is_array($this->tags)) + if ( ! is_array(self::$tags)) { // Create a new tags array - $this->tags = array(); + self::$tags = array(); // Tags have been created - $this->tags_changed = TRUE; + self::$tags_changed = TRUE; } } public function __destruct() { - if ($this->tags_changed === TRUE) + if (self::$tags_changed === TRUE) { // Save the tags - $this->backend->set(self::TAGS_KEY, $this->tags, $this->flags, $this->persistent_lifetime); + $this->backend->set(self::TAGS_KEY, self::$tags, $this->flags, 0); + + // Tags are now unchanged + self::$tags_changed = FALSE; } } public function find($tag) { - if (isset($this->tags[$tag]) AND $results = $this->backend->get($this->tags[$tag])) + if (isset(self::$tags[$tag]) AND $results = $this->backend->get(self::$tags[$tag])) { // Return all the found caches return $results; @@ -95,22 +92,16 @@ class Cache_Memcache_Driver implements Cache_Driver { if ( ! empty($tags)) { // Tags will be changed - $this->tags_changed = TRUE; + self::$tags_changed = TRUE; foreach ($tags as $tag) { // Add the id to each tag - $this->tags[$tag][$id] = $id; + self::$tags[$tag][$id] = $id; } } - if ($lifetime === 0) - { - // Using an expiration of zero is unreliable, as memcache may delete - // it without warning. @see http://php.net/memcache_set - $lifetime = $this->persistent_lifetime; - } - else + if ($lifetime !== 0) { // Memcache driver expects unix timestamp $lifetime += time(); @@ -123,14 +114,14 @@ class Cache_Memcache_Driver implements Cache_Driver { public function delete($id, $tag = FALSE) { // Tags will be changed - $this->tags_changed = TRUE; + self::$tags_changed = TRUE; if ($id === TRUE) { if ($status = $this->backend->flush()) { // Remove all tags, all items have been deleted - $this->tags = array(); + self::$tags = array(); // We must sleep after flushing, or overwriting will not work! // @see http://php.net/manual/en/function.memcache-flush.php#81420 @@ -141,28 +132,28 @@ class Cache_Memcache_Driver implements Cache_Driver { } elseif ($tag === TRUE) { - if (isset($this->tags[$id])) + if (isset(self::$tags[$id])) { - foreach ($this->tags[$id] as $_id) + foreach (self::$tags[$id] as $_id) { // Delete each id in the tag $this->backend->delete($_id); } // Delete the tag - unset($this->tags[$id]); + unset(self::$tags[$id]); } return TRUE; } else { - foreach ($this->tags as $tag => $_ids) + foreach (self::$tags as $tag => $_ids) { - if (isset($this->tags[$tag][$id])) + if (isset(self::$tags[$tag][$id])) { // Remove the id from the tags - unset($this->tags[$tag][$id]); + unset(self::$tags[$tag][$id]); } } @@ -173,23 +164,23 @@ class Cache_Memcache_Driver implements Cache_Driver { public function delete_expired() { // Tags will be changed - $this->tags_changed = TRUE; + self::$tags_changed = TRUE; - foreach ($this->tags as $tag => $_ids) + foreach (self::$tags as $tag => $_ids) { foreach ($_ids as $id) { if ( ! $this->backend->get($id)) { // This id has disappeared, delete it from the tags - unset($this->tags[$tag][$id]); + unset(self::$tags[$tag][$id]); } } - if (empty($this->tags[$tag])) + if (empty(self::$tags[$tag])) { // The tag no longer has any valid ids - unset($this->tags[$tag]); + unset(self::$tags[$tag]); } } |