X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fcache.php;h=c09a1dd9f27c75676eb24f634f6c0378547c798d;hb=b573c5e2603dab212bea99bc30beebcff91e2195;hp=23657bbf348ec436d26b372432f72ce61dab1246;hpb=de74c64490a028def7687cee40852e2072b0b5a8;p=quix0rs-gnu-social.git diff --git a/lib/cache.php b/lib/cache.php index 23657bbf34..c09a1dd9f2 100644 --- a/lib/cache.php +++ b/lib/cache.php @@ -47,6 +47,8 @@ class Cache var $_items = array(); static $_inst = null; + const COMPRESSED = 1; + /** * Singleton constructor * @@ -116,14 +118,11 @@ class Cache function get($key) { - $value = null; + $value = false; if (Event::handle('StartCacheGet', array(&$key, &$value))) { if (array_key_exists($key, $this->_items)) { - common_log(LOG_INFO, 'Cache HIT for key ' . $key); - $value = $this->_items[$key]; - } else { - common_log(LOG_INFO, 'Cache MISS for key ' . $key); + $value = unserialize($this->_items[$key]); } Event::handle('EndCacheGet', array($key, &$value)); } @@ -136,7 +135,7 @@ class Cache * * @param string $key The key to use for lookups * @param string $value The value to store - * @param integer $flag Flags to use, mostly ignored + * @param integer $flag Flags to use, may include Cache::COMPRESSED * @param integer $expiry Expiry value, mostly ignored * * @return boolean success flag @@ -148,9 +147,8 @@ class Cache if (Event::handle('StartCacheSet', array(&$key, &$value, &$flag, &$expiry, &$success))) { - common_log(LOG_INFO, 'Setting cache value for key ' . $key); - $this->_items[$key] = $value; + $this->_items[$key] = serialize($value); $success = true; @@ -161,6 +159,32 @@ class Cache return $success; } + /** + * Atomically increment an existing numeric value. + * Existing expiration time should remain unchanged, if any. + * + * @param string $key The key to use for lookups + * @param int $step Amount to increment (default 1) + * + * @return mixed incremented value, or false if not set. + */ + function increment($key, $step=1) + { + $value = false; + if (Event::handle('StartCacheIncrement', array(&$key, &$step, &$value))) { + // Fallback is not guaranteed to be atomic, + // and may original expiry value. + $value = $this->get($key); + if ($value !== false) { + $value += $step; + $ok = $this->set($key, $value); + $got = $this->get($key); + } + Event::handle('EndCacheIncrement', array($key, $step, $value)); + } + return $value; + } + /** * Delete the value associated with a key * @@ -174,8 +198,7 @@ class Cache $success = false; if (Event::handle('StartCacheDelete', array(&$key, &$success))) { - if (array_key_exists($key, $this->_items[$key])) { - common_log(LOG_INFO, 'Deleting cache value for key ' . $key); + if (array_key_exists($key, $this->_items)) { unset($this->_items[$key]); } $success = true; @@ -184,4 +207,23 @@ class Cache return $success; } + + /** + * Close or reconnect any remote connections, such as to give + * daemon processes a chance to reconnect on a fresh socket. + * + * @return boolean success flag + */ + + function reconnect() + { + $success = false; + + if (Event::handle('StartCacheReconnect', array(&$success))) { + $success = true; + Event::handle('EndCacheReconnect', array()); + } + + return $success; + } }