Как я могу разработать систему кэша с помощью PDO и memcached?

Я использую PDO для подключения к базе данных в системе, где я хочу реализацию memcached.

Я не знаю то, что ключи используют для кэширования результатов, потому что я не могу получить строку заключительного запроса с PDO (потому что подготовленные операторы).

Какая-либо хорошая идея для твердости это?

Заранее спасибо.

6
задан Castro 8 April 2010 в 14:29
поделиться

2 ответа

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

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

Обязательно прочтите раздел «Общие подходы к проектированию» в FAQ по кэшированию данных. Хорошая стратегия кэширования удаляет / заменяет кэшированные данные сразу после обновления - это позволяет вам кэшировать данные в течение нескольких часов / дней / недель и одновременно никогда не передавать устаревшие данные пользователям.

7
ответ дан 16 December 2019 в 21:37
поделиться

Вот интересное руководство, оно может быть полезно - http://techportal.inviqa.com/2009/02/16/getting-started- with-memcached /

Думаю, вы можете автоматизировать процесс, реализовав такую ​​функцию:

function query($name, $sql, $params, $db, $cache) {
    $result = $this->cache->get($name);

    if (!$result) {
        $stmt = $db->prepare($sql);
        $exec = $stmt->execute($params);
        $result = $stmt->fetch(PDO::FETCH_ASSOC);

        $cache->add($name, $result);
    }

    return $result;
}
1
ответ дан 16 December 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: