Hi,
Be careful about multi memcached servers. It seems logical the get() methods use only one server but, what about the delete() and update() methods?
In fact, at least the delete() method perform a delete on the first server it finds!
For the test code, you can see it there:
http://pecl.php.net/bugs/bug.php?id=16810
Hope this helps someone!
Wilfried
Memcache::delete
(PECL memcache >= 0.2.0)
Memcache::delete — サーバから項目を削除する
説明
bool Memcache::delete
( string $key
[, int $timeout
] )
Memcache::delete() は、 key に対応する項目を削除します。 パラメータ timeout が指定されている場合は、 その項目は timeout 秒が経過した後に 期限切れとなります。 memcache_delete() 関数を使用することも可能です。
パラメータ
- key
-
削除したい項目のキー。
- timeout
-
その項目の実行時間。 ゼロの場合は即時に削除されます。 たとえば 30 を設定すると、 その項目は 30 秒後に削除されます。
返り値
成功した場合に TRUE を、失敗した場合に FALSE を返します。
例
例1 Memcache::delete() の例
<?php
/* 手続き型の API */
$memcache_obj = memcache_connect('memcache_host', 11211);
/* 10 秒後に、項目がサーバから削除されます */
memcache_delete($memcache_obj, 'key_to_delete', 10);
/* オブジェクト指向の API */
$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host', 11211);
$memcache_obj->delete('key_to_delete', 10);
?>
Memcache::delete
Wilfried Loche
25-Aug-2009 09:01
25-Aug-2009 09:01
Jocke Berg
05-May-2009 10:02
05-May-2009 10:02
I was searching for a function/method in this class that would "reset" (or "update", depending on how you look at it) the timeout value for a key. I was searching my butt off when I finally figured; this is the one.
Example: You have accessed a web-page including something that should be "in-cache" for way more than 30 days (until the memcache server gets a downtime for some reason). Since the limit for having something in the cache is 30 days, this will be a problem. Simple (yet somewhat non-optimal) solution:
<?php
//How to "update" the value
if($memcache_key_exists){
$memcache_obj->delete('key', (3600*24*30));
}
?>
Have fun.
