Как проверить наличие пустого результирующего набора и неустановленного ключа в Memcached в CakePHP - PullRequest
0 голосов
/ 04 февраля 2011

Я использую Memcached в приложении CakePHP для кэширования наборов результатов MySQL.Один набор результатов, который я кеширую, является пустым примерно половину времени.

Проблема, с которой я сталкиваюсь, заключается в том, что когда набор результатов пуст и я устанавливаю ключ Memcached, он устанавливает пустой / ложный результат изМетод find в CakePHP.

Когда я проверяю ключ Memcached в моем скрипте при загрузке следующей страницы, он снова запускает запрос, поскольку при чтении значения ключа Memcached должно возвращаться значение false.

Вот мой общий Memcachedлогика с использованием утилиты CakePHP Cache:

if(!$resultsArray = Cache::read('results_array')) {  
    $resultsArray = $this->Model->find('all', $params);
    Cache::write('results_array', $resultsArray);
}

Рекомендуется проверять кэш, чтобы различать несуществующий ключ Memcached и ключ, который содержит ложное / пустое значение из предыдущей функции поиска.?(возможно, это больше касается PHP / программирования, чем Memcached).

Ответы [ 2 ]

0 голосов
/ 04 февраля 2011

Предложение:

if (($resultsArray = Cache::read('results_array')) === false) {  
    $resultsArray = $this->Model->find('all', $params);
    if (!$resultsArray) {
        $resultsArray = null;
    }
    Cache::write('results_array', $resultsArray);
}

У меня недостаточно опыта работы с Memcached, хотя я не могу сказать вам, будет ли различие false / null работать правильно, но теоретически это должно быть.

0 голосов
/ 04 февраля 2011

Вы должны использовать оператор строгого сравнения (!== или ===), чтобы отличить false от пустого значения.

Но я не думаю, что есть способ отличить кэшированное значениеfalse из ключа Memcached, который не существует.

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