diff options
Diffstat (limited to 'engine')
-rw-r--r-- | engine/lib/memcache.php | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/engine/lib/memcache.php b/engine/lib/memcache.php index b50c3c820..c5618b71d 100644 --- a/engine/lib/memcache.php +++ b/engine/lib/memcache.php @@ -34,9 +34,9 @@ private $memcache; /** - * Expiry of saved items (defaults forever) + * Expiry of saved items (default timeout after an hour to prevent anything getting too stale) */ - private $expires = 0; + private $expires = 3600; /** * The version of memcache running @@ -150,6 +150,7 @@ $key = $this->make_memcache_key($key); $this->keys_so_far[$key] = time(); + $this->save_persistent_keylist(); $result = $this->memcache->set($key, $data, null, $this->expires); if ((isset($CONFIG->debug)) && ($CONFIG->debug == true) && (!$result)) @@ -163,6 +164,7 @@ $key = $this->make_memcache_key($key); $this->keys_so_far[$key] = time(); + $this->save_persistent_keylist(); $result = $this->memcache->get($key); if ((isset($CONFIG->debug)) && ($CONFIG->debug == true) && (!$result)) @@ -183,9 +185,32 @@ foreach ($this->keys_so_far as $key => $ts) $this->memcache->delete($key, 0); + $this->clear_persistent_keylist(); $this->keys_so_far = array(); return true; } + + private function load_persistent_keylist() + { + return $this->memcache->get($this->namespace.':keys_so_far'); + } + + private function save_persistent_keylist() + { + $stored = $this->load_persistent_keylist(); + if ($stored) $this->keys_so_far = array_merge($this->keys_so_far, $stored); + return $this->memcache->set($this->namespace.':keys_so_far', $this->keys_so_far, null, 0); + } + + private function clear_persistent_keylist() + { + return $this->memcache->delete($this->namespace.':keys_so_far', 0); + } + + public function __destruct() + { + $this->save_persistent_keylist(); + } } ?>
\ No newline at end of file |