With the recent versions of memcached 1.4.3, the delete returns false because there is an error with the latest stable pecl extension 2.2.5.
Running memcached in -vvv mode will show why deletes fail:
CLIENT_ERROR bad command line format. Usage: delete <key> [noreply]
Simple fix, updated your memcache.c in your PECL extension at line 1494, in the mmc_delete() function. Change the command_len to the following:
command_len = spprintf(&command, 0, "delete %s", key);
This basically gets rid of that deprecated 3rd parameter, and deletes will work again. Hope this helps somebody (and gets fixed eventually).
Memcache::delete
(PECL memcache >= 0.2.0)
Memcache::delete — Efface un élément du serveur de cache
Description
bool Memcache::delete
( string $key
[, int $timeout
] )
Memcache::delete() efface l'élément identifié par la clé key . Si le paramètre timeout est spécifié, l'élément expirera après timeout secondes. Vous pouvez également utiliser la fonction memcache_delete().
Liste de paramètres
- key
-
La clé associée à l'élément à supprimer.
- timeout
-
Le délai d'exécution pour l'élément. S'il vaut 0, l'élément sera supprimé immédiatement, s'il vaut 30, il sera supprimé dans 30 secondes.
Valeurs de retour
Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.
Exemples
Exemple #1 Exemple avec Memcache::delete()
<?php
/* API procédurale */
$memcache_obj = memcache_connect('memcache_host', 11211);
/* après 10 secondes, l'élément sera effacé par la serveur de cache */
memcache_delete($memcache_obj, 'key_to_delete', 10);
/* API orientée objet */
$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host', 11211);
$memcache_obj->delete('key_to_delete', 10);
?>
Voir aussi
- Memcache::set() - Stocke des données dans le serveur de cache
- Memcache::replace() - Remplace une valeur d'un élément existant
Memcache::delete
harv at pringo dot com
10-Nov-2009 11:17
10-Nov-2009 11:17
Wilfried Loche
25-Aug-2009 09:01
25-Aug-2009 09: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 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.
