/** * Increment value of key * @param string $key * @param mixed $by_value * if stored value is array: * if $by_value is value in array, new element will be pushed to the end of array, * if $by_value is key=>value array, key=>value pair will be added (or updated) * @param int $limit_keys_count - maximum count of elements (used only if stored value is array) * @param int $ttl * @return int|string|array new value of key */ public function increment($key, $by_value = 1, $limit_keys_count = 0, $ttl = 259200) { if (!$this->acquire_key($key, $auto_unlocker)) { return false; } $value = $this->Couchbase->get($this->prefix . $key); if (empty($value)) { if ($this->save($key, $by_value, $ttl)) { return $by_value; } else { return false; } } $expiration = $this->ttl_to_expiration($ttl); if (is_array($value)) { $value = $this->incrementArray($limit_keys_count, $value, $by_value); } elseif (is_numeric($value) && is_numeric($by_value)) { if ($by_value > 0) { $this->setKeyTTL($key, $expiration); return $this->Couchbase->increment($this->prefix . $key, $by_value, true, $expiration); } else { $this->setKeyTTL($key, $expiration); return $this->Couchbase->decrement($this->prefix . $key, $by_value * -1, true, $expiration); } } else { $this->setKeyTTL($key, $expiration); $this->Couchbase->append($this->prefix . $key, $by_value, $expiration); return $this->Couchbase->get($this->prefix . $key); } if ($this->save($key, $value, $ttl)) { return $value; } else { return false; } }
<?php echo "--------------------------------------------------------------------------\n"; echo "\t Couchbase Atomic Counters\n"; echo "--------------------------------------------------------------------------\n"; $cb = new Couchbase(); echo "Set Counter to 0\n"; $cb->set("counter", 0); echo "Get counter: "; echo $cb->get("counter"); echo "\n"; $cb->increment("counter"); echo "Get counter: "; echo $cb->get("counter"); echo "\n"; echo "Increment by 10\n"; $cb->increment("counter", 10); echo "Get counter: "; echo $cb->get("counter"); echo "\n"; echo "\nDelete the counter\n"; $cb->delete("counter"); echo "\nInit the value to 10\n"; // create an set an initial $cb->increment("counter", 1, true, 0, 10); echo "Get counter: "; echo $cb->get("counter"); echo "\n"; // does not decrease below 0 $cb->set("counter", 0); $cb->decrement("counter");