Подтвердить что ты не робот

Как работает memcache с MySQL?

Я пытаюсь понять (и, возможно, развернуть) memcached в нашем env.

У нас есть 4 веб-сервера на платформе loadbalancer с большим веб-приложением, разработанным на PHP. Мы уже используем APC. Я хочу посмотреть, как работает memcached? По крайней мере, может быть, я не понимаю, как работает кеширование.

У нас есть несколько сложных динамических запросов, которые объединяют несколько таблиц для вывода данных. Каждый раз данные собираются из разных клиентских баз данных, и данные продолжают меняться. По моему мнению, если некоторые данные хранятся в кеше, и если запрос будет таким же в следующий раз, возвращаются те же данные. (Или я могу быть совершенно неправ здесь).

Как работает весь этот memcache (или что-то в этом роде)?

4b9b3361

Ответ 1

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

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

Пример (только демонстрационный):

$cache = new Memcached();

$cache->addServer('servername', 11211);

$myCacheKey = 'my_cache_key';

$row = $cache->get($myCacheKey);

if (!$row) {

    // Issue painful query to mysql
    $sql = "SELECT * FROM table WHERE id = :id";

    $dbo->prepare($sql);
    $stmt->bindValue(':id', $someId, PDO::PARAM_INT);

    $row = $stmt->fetch(PDO::FETCH_OBJ);

    $cache->set($myCacheKey, serialize($row));
}

// Now I have access to $row, where I can do what I need to
// And for subsequent calls, the data will be pulled from cache and skip
// the query altogether
var_dump(unserialize($row));

Ознакомьтесь с документами PHP на memcached для получения дополнительной информации, есть несколько хороших примеров и комментариев.

Ответ 2

Существует несколько примеров того, как работает memcache. Здесь является одной из ссылок.

Во-вторых, Memcache может работать с MySQL или без него.

Он кэширует ваши объекты, которые находятся на PHP, теперь, независимо от того, приходит ли он из MySQL или где-либо еще, если это объект PHP, он может быть сохранен в MemCache.

APC предоставляет вам больше возможностей, чем Memcache. Помимо хранения/кэширования объектов PHP, он также кэширует PHP-исполняемые-машиночитаемые коды операций, так что ваши файлы PHP не будут проходить процессы загрузки в память- > Быть Comiled, скорее, он непосредственно запускает уже скомпилированный код операции из памяти.

Ответ 3

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

P.S: Я быстро просмотрел Google и нашел это видео о memcached, у которого довольно хорошее качество = > http://www.bestechvideos.com/2009/03/21/railslab-scaling-rails-episode-8-memcached. Единственная проблема может заключаться в том, что речь идет о Ruby On Rails (что я также не так много использую, но очень легко понять). Надеюсь, это поможет вам понять концепцию немного лучше.