Memcache*d

Возможно ваш кэш не работает

Если у вас есть модуль "Кэширование" и вы используете memcache или memcached, возможно он у вас не работает или работает не правильно, даже если модуль и включен.

Ниже приведен код для проверки правильной работы

<?php

$driver = Core::$mainConfig['defaultCache'];
$aConfig = Core::$config->get('core_cache', array());
$config = $aConfig[$driver];

if($driver == 'memcache')
{
    if(extension_loaded('memcache'))
    {
        $memcache = new Memcache();
        $memcache->connect($config['server'], $config['port']);
        
        $return = $memcache->set('TEST', 123, MEMCACHE_COMPRESSED, 120);
        $message = ($return ? 'SUCCESS' : 'ERROR');
        echo $message . "<br />";
        
        print_r($memcache->getStats());
        echo "<br />";
    }
    else
    {
        echo "Memcache not available!<br />";
    }
}
elseif($driver == 'memcached')
{
    if(extension_loaded('memcached'))
    {
        $memcached = new Memcached();
        $memcached->addServer($config['server'], $config['port']);
        
        $memcached->set('TEST', 123, 120);
        $message = $memcached->getResultMessage();
        
        echo $message . "<br />";
        
        print_r($memcached->getStats());
        echo "<br />";
    }
    else
    {
        echo "Memcached not available!<br />";
    }
}

Если вы НЕ видите SUCCESS значит запись в кэш не работает, соответственно кэширование у вас на сайте не работает.

Если вы видите SUCCESS то в статистике стоит обратить на значения:

limit_maxbytes - параметр показывает максимальный объем памяти, которую Memcache*d может использовать для хранения значений (для магазинов рекомендуем минимум 128 Мб)

evictions — очень важный параметр, показывает количество объектов, которые пришлось удалить из хранилища для размещения там новых данных. Если он стал большим и все время растет, то имеет смысл оптимизировать использование памяти или добавить больше памяти для сервиса Memcache*d. get_hits - сколько раз мы взяли данные из кэша. get_misses - сколько раз мы пытались взять данные из кэша, но его там не было или время жизни кэша истекло. Отношение get_misses/get_hits показывает эффективность использования кэша. Чем оно меньше, тем эффективней используется кэш. Если у вас get_misses/get_hits >= 1, то значит вы делаете что-то не так (скорее всего ставите слишком малое время жизни кэша).

Максимальный размер записи данных по умолчанию 1 Мб, так что следует отслеживать какие данные у вас не попали в кэш, например через хук Core_Cache.onAfterSet

Last updated