Memcache
在线手册:中文  英文

Memcache::delete

(PECL memcache >= 0.2.0)

Memcache::delete从服务端删除一个元素

说明

bool Memcache::delete ( string $key [, int $timeout = 0 ] )

Memcache::delete()函数通过key删除一个元素。 如果参数timeout指定,该元素会在timeout秒后失效。 同样也可以使用 memcache_delete()函数完成同样功能。

参数

key

要删除的元素的key。

timeout

删除该元素的执行时间。如果值为0,则该元素立即删除,如果值为30,元素会在30秒内被删除。

更新日志

版本 说明
Unknown It's not recommended to use the timeout parameter. The behavior differs between memcached versions, but setting to 0 is safe. Other values for this deprecated feature may cause the memcache delete to fail.

返回值

成功时返回 TRUE, 或者在失败时返回 FALSE

范例

Example #1 Memcache::delete() example

<?php

/* procedural API */
$memcache_obj memcache_connect('memcache_host'11211);

/* 10秒后key_to_delete对应的值会被从服务端删除 */
memcache_delete($memcache_obj'key_to_delete'10);

/* OO API */
$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host'11211);

$memcache_obj->delete('key_to_delete'10);

?>

参见


Memcache
在线手册:中文  英文

用户评论:

padys (2013-04-12 06:24:55)

In my case this code does NOT work:
<?php
$memcache
->set('index''deleted'0, -1);
?>
because of expire == -1.

I set expire = 1 (and I prefer "replace"):
<?php
$memcache
->replace('index'''01);
?>

me at adamhahn dot com (2012-07-03 19:26:34)

I could not get the delete to work properly, so I ended up trying the 'set' method and setting the timeout value to -1.

<?php
$memcache
->set('index''deleted'0, -1);
?>

It solved my problem with the delete method.

(using memcached 1.4.5 and pecl-memcache 3.0.6)

vbaspcppguy at gmail dot com (2010-09-08 12:47:41)

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.

Anonymous (2010-07-28 15:30:34)

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 (2010-07-09 08:58:47)

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 (2009-12-28 08:21:32)

To workaround the "delete" issue just pass zero as timeout parameter.

Wilfried Loche (2009-08-25 02:01:57)

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 (2009-05-05 15:02:09)

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.

易百教程