如何获取memcached实例中设置的所有键?
我尝试使用谷歌搜索,但除了PHP支持getAllKeys方法之外没有找到太多,这意味着实际上可以以某种方式做到这一点.如何在telnet会话中获得相同的内容?
我已经尝试了memcached备忘单和Memcached telnet命令摘要中提到的所有检索相关选项,但它们都不起作用,我无法找到正确的方法来执行此操作.
注意:我目前正在开发中进行此操作,因此可以假设由于设置了新密钥或其他此类竞争条件而没有问题,并且密钥的数量也将受到限制.
这仅来自一个具有大约20M密钥(没有到期)和大约2G数据的memcached服务器.
将所有键/值对转储到平面文件中的最简单方法是什么?我首先查看了java net.spy.memcached.MemcachedClient,但是这个客户端不支持获取所有密钥(我认为).如果我有一个所有键的列表(我没有),我可以轻松地使用此客户端获取所有值.
我知道我可以使用一些telnet命令获取所有密钥(例如,telnet localhost 11211; stats items; stats cachedump),但我不清楚如何自动执行此操作.
编辑:这是我在我的机器上的玩具memcached服务器上做的工作.它似乎工作但我只在memcached中放了两个键,所以希望这个方法可以扩展好:
shell命令:
sudo yum install memcached
sudo /etc/init.d/memcached restart # maybe unnecessary
sudo yum install php
sudo yum install php-pecl-memcache
sudo service httpd reload
Run Code Online (Sandbox Code Playgroud)
php脚本,基于此:
<?php
$memcache = new Memcache();
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
$list = array();
$allSlabs = $memcache->getExtendedStats('slabs');
$items = $memcache->getExtendedStats('items');
foreach($allSlabs as $server => $slabs) {
foreach($slabs AS $slabId => $slabMeta) {
if (!is_int($slabId)) {
continue;
}
$cdump = $memcache->getExtendedStats('cachedump', (int) $slabId, …Run Code Online (Sandbox Code Playgroud)