Hi,

I'm the author of the cache_browser module and I'm wondering if it would be possible to integrate with cache router.

For this, we would need a couple of things that cache router would have to provide:

1) A method to get a list of cache tables managed by cache router (name and description). Probably from $conf array?
2) A method to get a list of cache entries managed by each table.

Probably the second thing is harder to do?

CommentFileSizeAuthor
#5 apc.php.txt943 bytesandypost
#5 eacc.php.txt956 bytesandypost

Comments

slantview’s picture

Assigned: Unassigned » slantview
Status: Active » Needs work

Hi,

I really like this idea. It would be especially useful once I get the statistics information available. I don't think it would be too difficult to add some functionality that allows you to get a list of cache entries at all. I could add a method to each cache engine.

I'm gonna put this in patch (code needs work) as we need a patch, if someone does it before me, great, otherwise I'll add it to my list of things to do.

Steve

markus_petrux’s picture

Sweet!

If that helps, here's a snippet of code I have extracted from a program I use to monitor memcache entries on our forums.

$mmc_servers = array(
  '127.0.0.1' => '11111',
);
$max_entries_per_request = 1000;
$mmc_items = array();
$mmc_items_count = $mmc_items_size = 0;
foreach ($mmc_servers as $host => $port ) {
  $mmc = new Memcache;
  if ($mmc->connect($host, $port)) {
    $slabs = $mmc->getStats('slabs');
    foreach ($slabs as $slab_id => $slab_info) {
      $slab_dump = $mmc->getStats('cachedump', $slab_id, $max_entries_per_request);
      foreach ($slab_dump as $item_key => $item_info) {
        if (!isset($mmc_items[$item_key])) {
          $mmc_items[$item_key] = array(
            'host' => $host,
            'slab' => $slab_id,
            'lru' => $item_info[1],
            'size' => $item_info[0],
          );
          $mmc_items_size += $mmc_items[$item_key]['size'];
          $mmc_items_count++;
        }
      }
    }
    $mmc->close();
  }
  unset($mmc);
}

ksort($mmc_items, SORT_STRING);

var_dump($mmc_items);

I wrote that a long time ago, and still works on our site :) ...though, we're not running the latest memcache/memcached version, so maybe there's an easier way to get this information.

andypost’s picture

It's really interesting - enumerate cache entries in memcache, it can be very useful to clear which is main problem of cacherouter

@markus_petrux Do you have some performance statistics about this - how long it takes to enumerate 1k , 10k entries?

markus_petrux’s picture

Unfortunately, nope. I use a similar code in our phpBB forums that I modified to cache just a few queries. We have 52 different entries in 3 separate memcached hosts (we have 4 apaches querying 3 memcached hosts via 1 Gbps ethernet). I runs quite fast, but I cannot tell how exactly.

I have modified the code to run the memcached queries in a loop, 100 times (which then reads 5200 entries from 3 hosts) and it took around 1 second, more or less.

andypost’s picture

StatusFileSize
new956 bytes
new943 bytes

Code to enumerate keys for:

APC

  $info = apc_cache_info('user', FALSE);
  //var_dump($info);
  print 'Entries: '. count($info['cache_list']) ."\n";

  foreach ($info['cache_list'] as $entry) {
    //print $entry['info'] .', ';
    if (strpos($entry['info'], $mask) === 0) {
      //apc_delete($entry['info']);
    }

Entry

array(10) {
  ["info"]=>
  string(14) "varvarvarvar10"
  ["ttl"]=>
  int(0)
  ["type"]=>
  string(4) "user"
  ["num_hits"]=>
  int(0)
  ["mtime"]=>
  int(1237770418)
  ["creation_time"]=>
  int(1237770418)
  ["deletion_time"]=>
  int(0)
  ["access_time"]=>
  int(1237770418)
  ["ref_count"]=>
  int(0)
  ["mem_size"]=>
  int(118)
}

and for eAccelerator

  $info = eaccelerator_list_keys();
  //var_dump($info);

  print 'Entries: '. count($info) ."\n";

  foreach ($info as $entry) {
    //print $entry['name'] .', ';
    if (strpos($entry['name'], $mask) === 0) {
      eaccelerator_rm($entry['name']);
    }
  }

Entry

array(4) {
    ["name"]=>
    string(30) "pd--cache-imagecache%3Apresets"
    ["ttl"]=>
    int(0)
    ["created"]=>
    int(1237751104)
    ["size"]=>
    int(1194)
  }

my tests on 10000 items (scripts attached)

APC

storing... elapsed 0.034 seconds
fetching info... elapsed 0.057 seconds
Entries: 10000
delete... elapsed 0.085 seconds
cleaning all... elapsed 0.001 seconds

storing... elapsed 0.033 seconds
fetching info... elapsed 0.065 seconds
Entries: 10000
delete... elapsed 0.063 seconds
cleaning all... elapsed 0.001 seconds

eAccelerator

storing... elapsed 0.391 seconds 
fetching info... elapsed 0.026 seconds 
Entries: 10007 
delete... elapsed 0.231 seconds

storing... elapsed 0.401 seconds
fetching info... elapsed 0.026 seconds 
Entries: 10007 
delete... elapsed 0.230 seconds
andypost’s picture

Forget to say - strpos() highly depends on size of key

adamo’s picture

No updates in a while... Anyone still working on this?