Memcached::getAllKeys

(PECL memcached >= 2.0.0)

Memcached::getAllKeysRecupera todas las claves almacenadas en todos los servidores

Descripción

public Memcached::getAllKeys(): array|false

Memcached::getAllKeys() consulta cada servidor memcache y recupera un array que contiene todas las claves almacenadas en cada uno de ellos. No se trata de una operación atómica, por lo que no proporciona una imagen realmente consistente de las claves en el instante dado. Dado que memcache no garantiza devolver todas las claves, no puede asegurarse de que todas las claves hayan sido devueltas.

Nota:

Este método está destinado a fines de depuración y no debe utilizarse a gran escala.

Parámetros

Esta función no contiene ningún parámetro.

Valores devueltos

Devuelve las claves almacenadas en todos los servidores en caso de éxito o false si ocurre un error.

add a note

User Contributed Notes 4 notes

up
6
flaviu dot chelaru at gmail dot com
8 years ago
// initiate the memcached instance
$cache = new \Memcached();
$cache->addServer('localhost', '11211');

// get all stored memcached items

$keys = $cache->getAllKeys();
$cache->getDelayed($keys);

$store = $cache->fetchAll();

// delete by regex keys

$keys = $cache->getAllKeys();
$regex = 'product_.*';
foreach($keys as $item) {
if(preg_match('/'.$regex.'/', $item)) {
$cache->delete($item);
}
}
up
2
danb1974 at gmail dot com
4 years ago
The right way to dump slab keys seems to be by using lru_crawler metadump instead of stats cachedump, see https://github.com/memcached/memcached/issues/405

<?php

function getAllKeys(string $host, int $port): array
{
$sock = fsockopen($host, $port, $errno, $errstr);
if (
$sock === false) {
throw new
Exception("Error connection to server {$host} on port {$port}: ({$errno}) {$errstr}");
}

if (
fwrite($sock, "stats items\n") === false) {
throw new
Exception("Error writing to socket");
}

$slabCounts = [];
while ((
$line = fgets($sock)) !== false) {
$line = trim($line);
if (
$line === 'END') {
break;
}

// STAT items:8:number 3
if (preg_match('!^STAT items:(\d+):number (\d+)$!', $line, $matches)) {
$slabCounts[$matches[1]] = (int)$matches[2];
}
}

foreach (
$slabCounts as $slabNr => $slabCount) {
if (
fwrite($sock, "lru_crawler metadump {$slabNr}\n") === false) {
throw new
Exception('Error writing to socket');
}

$count = 0;
while ((
$line = fgets($sock)) !== false) {
$line = trim($line);
if (
$line === 'END') {
break;
}

// key=foobar exp=1596440293 la=1596439293 cas=8492 fetch=no cls=24 size=14908
if (preg_match('!^key=(\S+)!', $line, $matches)) {
$allKeys[] = $matches[1];
$count++;
}
}

// if ($count !== $slabCount) {
// throw new Exception("Surprise, got {$count} keys instead of {$slabCount} keys");
// }
}

if (
fclose($sock) === false) {
throw new
Exception('Error closing socket');
}

return
$allKeys;
}
up
3
xiangku7890 at gmail dot com
9 years ago
First I use the lastest memcached version 1.4.25, but unfortunately I found memcached::getAllkeys do not work with it, though i follow the others suggestion to disable Memcached::OPT_BINARY_PROTOCOL. So i try to use history versions, when i use memcached version 1.4.17, it works.
up
1
harold at snel dot me
6 years ago
/**
* Get all memcached keys. Special function because getAllKeys() is broken since memcached 1.4.23. Should only be needed on php 5.6
*
* cleaned up version of code found on Stackoverflow.com by Maduka Jayalath
*
* @return array|int - all retrieved keys (or negative number on error)
*/
public function getMemcachedKeys($host = '127.0.0.1', $port = 11211)
{
$mem = @fsockopen($host, $port);
if ($mem === false)
{
return -1;
}

// retrieve distinct slab
$r = @fwrite($mem, 'stats items' . chr(10));
if ($r === false)
{
return -2;
}

$slab = [];
while (($l = @fgets($mem, 1024)) !== false)
{
// finished?
$l = trim($l);
if ($l == 'END')
{
break;
}

$m = [];
// <STAT items:22:evicted_nonzero 0>
$r = preg_match('/^STAT\sitems\:(\d+)\:/', $l, $m);
if ($r != 1)
{
return -3;
}
$a_slab = $m[1];

if (!array_key_exists($a_slab, $slab))
{
$slab[$a_slab] = [];
}
}

reset($slab);
foreach ($slab as $a_slab_key => &$a_slab)
{
$r = @fwrite($mem, 'stats cachedump ' . $a_slab_key . ' 100' . chr(10));
if ($r === false)
{
return -4;
}

while (($l = @fgets($mem, 1024)) !== false)
{
// finished?
$l = trim($l);
if ($l == 'END')
{
break;
}

$m = [];
// ITEM 42 [118 b; 1354717302 s]
$r = preg_match('/^ITEM\s([^\s]+)\s/', $l, $m);
if ($r != 1)
{
return -5;
}
$a_key = $m[1];

$a_slab[] = $a_key;
}
}

// close the connection
@fclose($mem);
unset($mem);

$keys = [];
reset($slab);
foreach ($slab AS &$a_slab)
{
reset($a_slab);
foreach ($a_slab AS &$a_key)
{
$keys[] = $a_key;
}
}
unset($slab);

return $keys;
}
To Top