Memcache получает ключевое время истечения срока действия

Используя memcached и библиотеку php memcached, есть ли способ получить текущие ключи для истечения срока действия при получении ?

Нет, такие данные не извлекаются с конца клиента. Если вам это действительно нужно, храните его вместе с данными в сериализованном массиве или что-то в этом роде. Кроме того, проверьте этот пост на всякий случай, если вы пытаетесь сделать что-то подобное.

Используйте этот пример. Он показывает все ключи сервера с истекающим временем, поэтому вы можете получить время истечения текущего ключа.

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 dmY',$v[1]).'<br />'; } } } } } 

Три примечания о фрагменте Джейсона:

  1. в сообщении ответа cachedump есть ограничение в размере 2 cachedump , поэтому вы должны проверить, есть ли в ответе все сохраненные ключи, вы можете получить реальные номера хранимых ключей в $slabMeta['used_chunks'] .

  2. Memcached сохраняет истекшие ключи, пока кто-то не получит их; если вы хотите получить срок действия действительных ключей, вы можете попытаться получить значения всех возвращаемых cachedump . Выполняя эту процедуру много раз, вы можете удалить все истекшие ключи и максимизировать возможность читать все ключи (см. Ограничение в точке 1)

  3. в memcached (старой) версии 1.2.2 значение, возвращаемое в $v[1] является временем создания ключа, а не временем истечения ключа, в этой версии нет способа получить время истечения срока действия ключа