Используя 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 />'; } } } } }
Три примечания о фрагменте Джейсона:
в сообщении ответа cachedump
есть ограничение в размере 2 cachedump
, поэтому вы должны проверить, есть ли в ответе все сохраненные ключи, вы можете получить реальные номера хранимых ключей в $slabMeta['used_chunks']
.
Memcached сохраняет истекшие ключи, пока кто-то не получит их; если вы хотите получить срок действия действительных ключей, вы можете попытаться получить значения всех возвращаемых cachedump
. Выполняя эту процедуру много раз, вы можете удалить все истекшие ключи и максимизировать возможность читать все ключи (см. Ограничение в точке 1)
в memcached (старой) версии 1.2.2 значение, возвращаемое в $v[1]
является временем создания ключа, а не временем истечения ключа, в этой версии нет способа получить время истечения срока действия ключа