memcached

memcached
memcached
Тип

memcached

Разработчик

Danga Interactive

Написана на

C[1]

Операционная система

Кроссплатформенное ПО

Последняя версия

1.4.14[2] (30 июля 2012)

Лицензия

BSD

Сайт

memcached.org/

memcached — связующее программное обеспечение, реализующее сервис кэширования данных в оперативной памяти на основе парадигмы хеш-таблицы.

С помощью клиентской библиотеки (для C/C++, Ruby, Perl, PHP, Python, Java, CSharp/.Net и др.) позволяет кэшировать данные в оперативной памяти из множества доступных серверов. Распределение реализуется путем сегментирования данных по значению хэша ключа по аналогии с сокетами хэш-таблицы. Клиентская библиотека, используя ключ данных, вычисляет хэш и использует его для выбора соответствующего сервера. Ситуация сбоя сервера трактуется как промах кэша, что позволяет повышать отказоустойчивость комплекса за счет наращивания количества memcached серверов и возможности производить их горячую замену.

В API memcached есть только базовые функции: выбор сервера, установка и разрыв соединения, добавление, удаление, обновление и получение объекта, а также Compare-and-swap. Для каждого объекта устанавливается время жизни, от 1 секунды до бесконечности. При исчерпании памяти более старые объекты автоматически удаляются. Для PHP также есть уже готовые библиотеки PECL для работы с memcached, которые дают дополнительную функциональность.

Содержание

Пример кода

Обратите внимание, что все функции, описанные в этом разделе, написаны на псевдокоде. Синтаксис вызова Memcached может отличаться в зависимости от используемого языка программирования и используемого API. Запрос к базе данных (без использования memcached) может выглядеть как в следующем примере:

 function get_foo(int userid) {
    result = db_select("SELECT * FROM users WHERE userid = ?", userid);
    return result;
 }

После введения использования memcached, этот же вызов может выглядеть следующим образом (здесь и далее используется псевдокод, синтаксис вызова memcached может отличаться):

 function get_foo(int userid) {
     /* вначале проверить кэш */
     data = memcached_fetch("userrow:" + userid);
     if (!data) {
         /* не найдено: запросить БД */
         data = db_select("SELECT * FROM users WHERE userid = ?", userid);
         /* сохранить в кэше для будущих запросов */
         memcached_add("userrow:" + userid,  data);
     }
     return data;
 }

Сервер вначале проверит, хранит ли Memcached значение с уникальным ключом «userrow: userid», где userid является некоторым числом. Если кэш не содержит такие данные, сервер сделает запрос к БД, как обычно, и установит уникальный ключ, используя вызов к memcached API.

Однако, если использовать только этот вызов к API, сервер может вернуть некорректные данные после любого обновления БД: Memcached будет хранить и возвращать устаревшие данные. Поэтому, в дополнение к вызову на занесение данных в кэш, также необходимо и обновление:

 function update_foo(int userid, string dbUpdateString) {
     /* вначале обновить БД */
     result = db_execute(dbUpdateString);
     if (result) {
         /* обновление БД состоялось: подготовить данные для занесения в кэш*/
         data = db_select("SELECT * FROM users WHERE userid = ?", userid);
         /* последняя строка также могла выглядеть наподобие   data = createDataFromDBString(dbUpdateString);   */
         /* занести обновленные данные в кэш */
         memcached_set("userrow:" + userid, data);
     }
 }

Этот вызов обновит кэшированные данные, чтобы они соответствовали новым данным в базе данных, только если запрос на обновление базы закончится успехом. Другой подход может заключаться в том, чтобы очистить кэш по данному ключу с помощью функции Memcached, чтобы последующий вызов не нашел данные в кэше и запросил их в базе данных. Аналогичные действия нужны и в случае удаления данных из базы данных, чтобы кэш оставался корректным либо частично незаполненным.

Примечания

  1. InfoQ: JGroups Implementation of Memcached Supports Failover and JMX
  2. Memcached 1.4.14 Release notes. Архивировано из первоисточника 25 июня 2012. Проверено 30 июля 2012.

См. также

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Полезное


Смотреть что такое "memcached" в других словарях:

  • Memcached — Developer(s) Danga Interactive Initial release May 22, 2003 (2003 05 22) Stable release 1.4.10 / November 9, 2011; 3 days ago (2011 11 09 …   Wikipedia

  • memcached — Entwickler Danga Interactive Aktuelle Version 1.4.5 (3. April 2010) Betriebssystem Unix Derivate, Windows Kategorie Cache Server …   Deutsch Wikipedia

  • Memcached — Тип memcached Разработчик Danga Interactive Написана на C[1] ОС Кроссплатформенное ПО …   Википедия

  • Memcached — est un système d usage général servant à gérer la mémoire cache distribuée. Il est souvent utilisé pour augmenter la vitesse de réponse des sites web créés à partir de bases de données. Il gère les données et les objets en RAM de façon à réduire… …   Wikipédia en Français

  • Memcached — Este artículo o sección necesita referencias que aparezcan en una publicación acreditada, como revistas especializadas, monografías, prensa diaria o páginas de Internet fidedignas. Puedes añadirlas así o avisar al autor pri …   Wikipedia Español

  • Membase — Developer(s) Couchbase (merged from NorthScale), Zynga, NHN Stable release 1.7.1 / July 26, 2011; 2 months ago (2011 07 26) Written in C++, Erlang …   Wikipedia

  • Brad Fitzpatrick — Bradley Joseph Brad Fitzpatrick (born February 5, 1980 in Iowa), often seen on the Internet under the nickname bradfitz, is an American programmer. He is best known as the creator of LiveJournal and is the author of a variety of free software… …   Wikipedia

  • Сравнение каркасов веб-приложений — Это сравнительная таблица фреймворков веб приложений. Содержание 1 Фреймворки 1.1 ASP.NET 1.2 C++ 1.3 ColdFusion Markup Language (CFML) …   Википедия

  • Comparison of web application frameworks — This is a comparison of notable web application frameworks. Contents 1 General 1.1 Perl 1.2 PHP 1.3 Java 1.4 Python …   Wikipedia

  • MemcacheDB — Stable release 1.2.1 / December 25, 2008 Operating system Cross platform Type distributed memory caching system License BSD License …   Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»