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

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

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

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

Как работает весь этот memcache (или, если вообще, какой-либо кеширующий материал)?

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

Что касается 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 для получения дополнительной информации, есть несколько хороших примеров и комментариев.

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

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

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

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

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

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