Sometimes it’s useful to be able to quickly peek what keys memcache is storing and how old are they. A good use case for example could be to check whether something is cached or not or that they expire as they should.
At first I found a way to dump memcache keys through telnet. However if a memcache instance is fairly large and has a lot of slabs and thousands of keys it becomes impractical to do it manually.
I wrote a simple utility that helps me find keys across all memcache slabs.
#!/usr/bin/php
< ?php
$host = "127.0.0.1";
$port = 11211;
$lookupKey = "";
$limit = 10000;
$time = time();
foreach ($argv as $key => $arg) {
switch ($arg) {
case '-h':
$host = $argv[$key + 1];
break;
case '-p':
$port = $argv[$key + 1];
break;
case '-s':
$lookupKey = $argv[$key + 1];
break;
case '-l':
$limit = $argv[$key + 1];
}
}
$memcache = memcache_connect($host, $port);
$list = array();
$allSlabs = $memcache->getExtendedStats('slabs');
$items = $memcache->getExtendedStats('items');
foreach ($allSlabs as $server => $slabs) {
foreach ($slabs as $slabId => $slabMeta) {
if (!is_numeric($slabId)) {
continue;
}
$cdump = $memcache->getExtendedStats('cachedump', (int)$slabId, $limit);
foreach ($cdump as $server => $entries) {
if (!$entries) {
continue;
}
foreach($entries as $eName => $eData) {
$list[$eName] = array(
'key' => $eName,
'slabId' => $slabId,
'size' => $eData[0],
'age' => $eData[1]
);
}
}
}
}
ksort($list);
if (!empty($lookupKey)) {
echo "Searching for keys that contain: '{$lookupKey}'\n";
foreach ($list as $row) {
if (strpos($row['key'], $lookupKey) !== FALSE) {
echo "Key: {$row['key']}, size: {$row['size']}b, age: ", ($time - $row['age']), "s, slab id: {$row['slabId']}\n";
}
}
} else {
echo "Printing out all keys\n";
foreach ($list as $row) {
echo "Key: {$row['key']}, size: {$row['size']}b, age: ", ($time - $row['age']), "s, slab id: {$row['slabId']}\n";
}
}
This script accepts 4 parameters:
-h host
-p port
-s partial search string
-l a limit of how many keys to dump from a single slab (default 10,000)
The easiest way to use it:
./membrowser.php -s uk
Searching for keys that contain: ‘uk’
Key: 1_uk_xml, size: 3178b, age: 1728s, slab id: 17
Key: 2_uk_xml, size: 3178b, age: 1725s, slab id: 17
Key: 3_uk_xml, size: 3178b, age: 1721s, slab id: 17
Download memcache keys dump script.
P.S some of the code I’ve copied from 100days.de blog post.
1 Comment for Dumping Memcache Keys
Mickey | September 16, 2011 at 11:46 AM


There are no words to describe how boaidcous this is.