According to the documents, $timeout is not required, but for me if I did not include it regardless of value, it fired an error. I made a simple fix for it.
<?php
class memcache_tools extends memcache
{
public function delete($key, $expire=0)
{
parent::delete($key, $expire);
}
}
?>
This will force it to behave as it should regardless of version.
Memcache::delete
(PECL memcache >= 0.2.0)
Memcache::delete — サーバーから項目を削除する
説明
bool Memcache::delete
( string
$key
[, int $timeout = 0
] )
Memcache::delete() は、
key に対応する項目を削除します。
パラメータ
-
key -
削除したい項目のキー。
-
timeout -
この非推奨のパラメータはサポートしておらず、デフォルトで 0 秒になっています。 このパラメータを使ってはいけません。
変更履歴
| バージョン | 説明 |
|---|---|
| Unknown |
timeout パラメータを使うことは推奨しません。
このパラメータの挙動は memcached のバージョンによって異なりますが、
0 に設定しておけば安全です。
その他の値を指定すると、memcache の削除が失敗する原因となる可能性があります。
|
返り値
成功した場合に TRUE を、失敗した場合に FALSE を返します。
例
例1 Memcache::delete() の例
<?php
/* 手続き型の API */
$memcache_obj = memcache_connect('memcache_host', 11211);
/* 項目をサーバーから削除します */
memcache_delete($memcache_obj, 'key_to_delete');
/* オブジェクト指向の API */
$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host', 11211);
$memcache_obj->delete('key_to_delete');
?>
vbaspcppguy at gmail dot com
08-Sep-2010 12:47
Anonymous
28-Jul-2010 03:30
Regardless of whether or not it succeeds, for me on Ubuntu 10.04 it always returns false. Just an FYI, you can't seem to rely on the result.
nibblebot at gmail dot com
09-Jul-2010 08:58
the Memcache::delete(key) function is broken on several combinations of memcached+pecl-memcache combinations.
pecl-memcache 2.2.5 + memcached 1.4.2 - Memcache::delete(key) WORKS
pecl-memcache 2.2.5 + memcached 1.4.3 - Memcache::delete(key) DOES NOT WORK
pecl-memcache 2.2.5 + memcached 1.4.4 - Memcache::delete(key) WORKS
pecl-memcache 2.2.5 + memcached 1.4.5 - Memcache::delete(key) WORKS
pecl-memcache 3.0.4 + memcached 1.4.2 - Memcache::delete(key) WORKS
pecl-memcache 3.0.4 + memcached 1.4.3 - Memcache::delete(key) DOES NOT WORK
pecl-memcache 3.0.4 + memcached 1.4.4 - Memcache::delete(key) DOES NOT WORK
pecl-memcache 3.0.4 + memcached 1.4.5 - Memcache::delete(key) DOES NOT WORK
z at zaebal dot com
28-Dec-2009 08:21
To workaround the "delete" issue just pass zero as timeout parameter.
Wilfried Loche
25-Aug-2009 02:01
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
Jocke Berg
05-May-2009 03: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.
