diff options
author | Brion Vibber <brion@pobox.com> | 2010-02-16 09:25:09 -0800 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2010-02-16 09:25:09 -0800 |
commit | d5cbfe8071d56438cfa168dc3db56a959317eae0 (patch) | |
tree | c00ca6c3e0d1bd2fb9b05a515c337b6afce3a070 /lib/cache.php | |
parent | d4f6235d7b8a40bd1b51370e7eb405cdb14e61fb (diff) | |
parent | 81b6b58e33f55054b7e5dd546f06dbdb5696ed92 (diff) |
Merge branch 'testing' into 0.9.x
Conflicts:
lib/iomaster.php
Diffstat (limited to 'lib/cache.php')
-rw-r--r-- | lib/cache.php | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/cache.php b/lib/cache.php index df6fc3649..c09a1dd9f 100644 --- a/lib/cache.php +++ b/lib/cache.php @@ -160,6 +160,32 @@ class Cache } /** + * 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 * * @param string $key Key to delete |