Memcache获得密钥到期时间

时间:2011-03-16 17:43:47

标签: php memcached

使用memcached和php memcached库,有没有办法在执行get时获取当前密钥的到期时间?

3 个答案:

答案 0 :(得分:13)

使用此示例。它显示所有服务器密钥的过期日期时间,因此您可以获得当前密钥的到期时间。

function getMemcacheKeys() {

    $memcache = new Memcache;
    $memcache->connect('192.168.1.18', 11211) or die ("Could not connect to memcache server");

    $list = array();
    $allSlabs = $memcache->getExtendedStats('slabs');
    foreach($allSlabs as $server => $slabs) {
        foreach($slabs as $slabId => $slabMeta) {
           if (!is_numeric($slabId)) {
                continue;
           } 
           $cdump = $memcache->getExtendedStats('cachedump',(int)$slabId);
            foreach($cdump AS $keys => $arrVal) {
                if (!is_array($arrVal)) continue;
                foreach($arrVal AS $k => $v) {                   
                    echo $k .' - '.date('H:i d.m.Y',$v[1]).'<br />';
                }
           }
        }
    }   
}

答案 1 :(得分:6)

不,这种数据无法从客户端检索。如果您真的需要它,请将它与数据一起存储在序列化数组中。另外,请查看this post,以防您尝试执行类似操作。

答案 2 :(得分:3)

关于Jason的片段的三个注释:

  1. cachedump回复邮件中限制为2兆,因此您必须验证答案中是否存在所有存储的密钥,您可以在{{1}中获取实数存储的密钥}}

  2. Memcached保留过期的密钥,直到有人得到它们为止;如果您想获得有效密钥的到期时间,您可以尝试获取$slabMeta['used_chunks']返回的所有值的值。多次运行此程序,您可以删除所有过期的密钥,并最大限度地提高读取所有密钥的可能性(请参阅第1点的限制)

  3. 在memcached(旧)版本1.2.2中
  4. 返回到cachedump的值是密钥创建时间而不是密钥到期时间,在此版本中没有办法获得到期关键时间