Memcache::increment
(PECL memcache >= 0.2.0)
Memcache::increment — 項目の値を増やす
説明
Memcache::increment() は、項目の値を
value
だけ増やします。
もし key
に対応する値が数値ではなく、かつ
数値に変換できなかった場合は、その新しい値は
value
となります。
Memcache::increment() は、指定した項目が
存在しない場合に項目を作成することは
ありません。
memcache_increment() 関数を使用することも可能です。注意:
圧縮して格納されている項目に対して Memcache::increment() を使用しないでください。 なぜなら、それ以降の Memcache::get() のコールが 失敗してしまうからです。
パラメータ
key
-
値を増やす項目のキー。
value
-
項目の値を
value
だけ増やします。
戻り値
項目の新しい値か、失敗した場合に false
を返します。
例
例1 Memcache::increment() の例
<?php
/* 手続き型の API */
$memcache_obj = memcache_connect('memcache_host', 11211);
/* カウンタを 2 増やします */
$current_value = memcache_increment($memcache_obj, 'counter', 2);
/* オブジェクト指向の API */
$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host', 11211);
/* カウンタを 3 増やします */
$current_value = $memcache_obj->increment('counter', 3);
?>
+add a note
User Contributed Notes 5 notes
jay dot paroline at escapemg dot com ¶
15 years ago
Instead of checking the value before incrementing, you can simply ADD it instead before incrementing each time. If it's already there, your ADD is ignored, and if it's not there, it's set.
If you add($memcacheKey, 0) and then increment($memcacheKey, 1) in that order, you avoid all possible race conditions. If two threads are running this code concurrently, you will always end up with your value being 2 no matter which order the threads execute in.
Anonymous ¶
15 years ago
Please note:
If the key does not exist, memcache does NOT return false (as you might expect) but 0.
You won't get any hint that the key did not exist and still does not exist and that nothing was incremented.
perroazul64 at gmail dot com ¶
13 years ago
When the key doesn't exist it may return either bool(false) or int(0) (I get different return values on different servers), so be careful if you check for something like ($memcache->increment($key) === false).
ian at blip dot fm ¶
15 years ago
Be careful to use Memcache::decrement() and never Memcache::increment() with a negative value.
The check that prevents Memcache::decrement() from going negative is not in place with Memcache::increment(), so you can end up with a garbage integer on the order of 18 quintillion stored in place of the expected value.
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google