Memcache получить время истечения срока действия ключа - PullRequest
7 голосов
/ 16 марта 2011

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

Ответы [ 3 ]

13 голосов
/ 20 сентября 2011

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

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 />';
                }
           }
        }
    }   
}
6 голосов
/ 16 марта 2011

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

3 голосов
/ 12 ноября 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...