Comment puis-je la requête memcached avec php pour obtenir une liste de tous ses clés dans le stockage?
J'ai besoin de répliquer memcached pour une autre valeur de la clé (système de couchbase). Comment puis-je interroger le contenu d'un serveur memcache pour obtenir une liste de ce qui est là-bas, alors que je peux la copier?
function getMemcacheKeys(){
$memcache =newMemcache;
$memcache->connect('127.0.0.1',11211)ordie("Could not connect to memcache server");
$list = array();
$allSlabs = $memcache->getExtendedStats('slabs');
$items = $memcache->getExtendedStats('items');foreach($allSlabs as $server => $slabs){foreach($slabs AS $slabId => $slabMeta){
$cdump = $memcache->getExtendedStats('cachedump',(int)$slabId);foreach($cdump AS $keys => $arrVal){if(!is_array($arrVal))continue;foreach($arrVal AS $k => $v){
echo $k .'<br>';}}}}}
Je veux juste noter ici que, bien que cela fonctionne cachedump est vraiment destiné pour memcached des fins de débogage et n'est pas destiné à être utilisé comme cela. Les futures versions de memcached aussi ne pouvait pas soutenir cachedump. (Voir le commentaire 8 ici de l'un des principaux memcached contributeurs code.google.com/p/memcached/issues/detail?id=187) Cachedump ne semble pas pour obtenir toutes les clés (j'ai essayé de faire cela, et alors tombé sur ce lien): code.google.com/p/memcached/wiki/NewProgrammingFAQ un petit mais la grande différence qui a fonctionné pour moi a été le limit paramètre dans getExtendedStats la fonction, la valeur par défaut est 100. mise à jour: $cdump = $memcache->getExtendedStats('cachedump',(int)$slabId,100000000); Cette fonction est défectueux, car il rend le memcache readonly, au moins avec la version actuelle de memcache PECL (3.0.8) et memcached (1.4.21) vous pouvez passer de 0 comme le dernier paramètre à supprimer la limite entièrement
C'est la meilleure réponse actuellement, même si les gens n'ont pas voté pour elle; mais la question asker a une question sur Memcached avec un "d". Je ne sais pas pourquoi Mark Baker réponse a beaucoup de upvotes. C'est la bonne réponse. D'accord, la meilleure réponse.
memcache >= 2.0.0
Cachedump ne semble pas pour obtenir toutes les clés (j'ai essayé de faire cela, et alors tombé sur ce lien): code.google.com/p/memcached/wiki/NewProgrammingFAQ
un petit mais la grande différence qui a fonctionné pour moi a été le limit paramètre dans
getExtendedStats
la fonction, la valeur par défaut est 100. mise à jour:$cdump = $memcache->getExtendedStats('cachedump',(int)$slabId,100000000);
Cette fonction est défectueux, car il rend le memcache readonly, au moins avec la version actuelle de memcache PECL (3.0.8) et memcached (1.4.21)
vous pouvez passer de 0 comme le dernier paramètre à supprimer la limite entièrement
OriginalL'auteur Mark Baker
Toutes ces solutions pour Memcache voici donc pour Memcached
C'est la bonne réponse.
D'accord, la meilleure réponse.
OriginalL'auteur Maduka Jayalath
Merci pour l'exemple de code
Voici comment faire pour supprimer une clé spécifique ou plusieurs clés
Je suis l'aide d'une classe d'aide pour supprimer le cache de sorte que vous avez à donner à la fonction d'une référence à la connexion memcache
Cela permettra de supprimer toutes les clés qui ont le mot "Prix".
OriginalL'auteur webmaster