Структуры данных в memcached/memcachedb. часть 1

Memcached

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

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

Кэширование объектов в WordPress работает по тому же принципу, что и Memcached — произвольные значения или объекты хранятся в памяти под определенным ключом. Недостаток один — поскольку кэш объектов в WordPress является непостоянным, все закэшированные значения сбрасываются при следующем посещении страницы сайта.

Сервер Memcached помогает решить эту проблему и сделать объектный кэш постоянным. Это значит, что такие данные как опции сайта WordPress, пользователи, термины, записи, мета-данные и прочее, можно сразу получать из хранилища Memcached в обход базы данных MySQL.

Установка Memcached

Для того, чтобы установить сервер Memcached вам потребуется доступ администратора к вашей хостинг-площадки. Большинство провайдеров виртуального хостинга не предоставляют такой возможности, поэтому следует смотреть в сторону виртуальных (VPS) или выделенных (dedicated) серверов. Учтите так же, что на некоторых специализированных хостинг-площадках уже установлен и настроен сервер Memcached, например WP Engine.

Установить сервер Memcached легко с помощью менеджера пакетов в том или ином дистрибутиве Linux. Например в Ubuntu или Debian Linux сделать это можно с помощью утилиты :

sudo apt-get install memcached

После установки сервер Memcached запустится сразу. Конфигурация сервера находится в файле , где вы можете настраивать такие параметры как память, адрес и порт. Эти данные вам потребуются при конфигурации плагина для WordPress.

После внесения изменений в конфигурационный файл не забудьте перезагрузить сервер:

sudo service memcached restart

Учтите, что перезагрузка сервера удаляет все закэшированные данные, поэтому перезагрузка на живом сайте может вызвать дополнительную нагрузку на хостинг-сервер и крайне не рекомендуется.

Memcached And Object Caching Explained In Plain English

Before getting into the details of Memcached, let’s explain what object caching does precisely.

If page caching takes care of caching static resources (images, HTML, CSS and JS files) and browser caching manages the same resources within the browser, object caching is devoted to your database.

The aim of object caching is to cache query results from your database. You can find a detailed explanation of what object caching is on our blog.

An efficient database is one of the crucial factors for a fast website: WordPress is a content management system which is naturally dependent on its MySQL database.

Every time users (or crawlers) make a request on your website, they generate database queries. If your site experiences a large number of requests to the database, queries can quickly pile up, overwhelming your server and slowing down your website.

The good news is the WordPress introduced its object caching class a long time ago: it was 2005 when the class named WP_Object_Cache was implemented into WordPress core.

What Does WordPress Object Caching Do?

WordPress built-in object caching saves a copy of complex queries and stores their results in a database table (i.e., like a HTTPS redirect).

The most frequently used queries running on the pages of your site are stored on the database: this copy of the requests allows to reduce load time and make your website more performant.

Of course, this process is not a prerogative of WordPress sites: the same thing happens on all sites where an object caching system has been implemented.

For example, Drupal, which is another very popular content management system, implements a similar built-in object caching system.

If object caching is working, your server won’t have to regenerate queries’ results every time, but it can use the object caching layer previously created.

To store an object cache, you can use different technologies: among the most popular object caching engines are Memcached, Redis, and APC.

Memcached и Memcache

Под Memcached чаще понимают кеширующий сервер, когда как Memcache — это расширение PHP, предназначенное для работы с этим сервером. Хотя, есть и memcached — расширение PHP.

Различия между этими двумя расширениями небольшие:

  • Memcache старше: его разработка началась в 2004 году. Memcached разрабатывается с 2009
  • Memcache используется много чаще, чем Memcached.
  • Memcache ограниченней Memcached и не использует возможности сервера Memcached в полную силу (поэтому и началась разработка расширения Memcached).
  • Memcache легче и производительней Memcached (судя по заявлениям специалистов, разница порядка 10%)

Поэтому если функционала Memcache хватает (а в большинстве случаев так и бывает), то используйте Memcache, он быстрее и легче. Если нужны дополнительные возможности, Memcached — ваш выбор.

Разделы

FTP

  • Общие сведения
  • Решение проблем
  • Подключение по FTP через FileZilla
  • Подключение по FTP через Total Commander
  • Подключение по SFTP через WinSCP

Веб-приложения

  • Общие сведения по установке приложений (виртуальное окружение Docker)
  • PHP
  • Node.js
  • Ruby
  • Perl
  • Python
  • Установка PHP-фреймворков
  • Инструкция по установке composer

Домены

  • Как перенести домены в зонах .RU и .РФ к регистратору Beget
  • Как изменить сведения об администраторе домена .RU/.РФ/.SU
  • Как продлить доменное имя через Beget
  • Аннулирование доменного имени в зоне .RU/.РФ для которого Beget является регистратором
  • Изменение NS-серверов для доменного имени
  • Передача права администрирования доменного имени .RU/.РФ/.SU и международных зонах (Смена администратора домена)
  • Как перенести домены в Beget
  • Перенос доменов от регистратора Beget к другому регистратору
  • Разрешение споров о доменах
  • Инструкция по переносу доменов .RU/.РФ от Reg.ru на обслуживание к нам.

Другое

  • Полный бекап сайта через SSH
  • Основы работы с редактором VIM
  • Волшебный файл .htaccess
  • Примеры использования mod_rewrite
  • Установка GoogleAdsense и Яндекс.Директ
  • Подключение Google Analytics и Яндекс.Метрика
  • XDebug — дебаг и профилирование кода php (profiling)
  • Защита сайта от DDoS-атак
  • Мультисайтовость на движке Bitrix
  • Система защиты от DDOS атак — Syncookied
  • Восстановление сайта из резервной копии, сохранённой в корень аккаунта
  • Блокировка PHP сессий

Почта

  • Общие сведения
  • Решение проблем
  • Настройка DKIM
  • Настройка сервиса «Яндекс.Почта» для домена
  • Настройка Windows Live Mail
  • Настройка Microsoft Outlook
  • Настройка The Bat!
  • Настройка Mozilla Thunderbird
  • Настройка Mail на Mac OS X
  • Настройка почты на мобильных приложениях

Сайты

  • Неверное отображение домена в ссылках
  • Ошибка — Warning: Cannot modify header information…
  • Русификация Drupal
  • Сайт в неверной кодировке
  • Перенос сайта к нам
  • Как установить шаблон на CMS Joomla!
  • Как опубликовать сайт, созданный в Adobe Muse
  • Как добавить соответствие IP-адреса и домена сайта в файл /etc/hosts
  • Как сбросить пароль от панели управления сайтом в популярных CMS
  • Установка и настройка CPA-Tracker
  • Подключение SSL к сайту
  • Перенос сайта с аккаунта на аккаунт
  • Как экспортировать и импортировать базу данных Mysql

Сервисы

  • Настройка и использование Memcached
  • Использование Redis
  • Использование Sphinx
  • Подключение Sphinx к WordPress
  • Подключение Sphinx к Joomla
  • Настройка Sphinx в CMS Bitrix
  • Автоматический перенос сайтов

VPS

  • Перенос сайта c виртуального хостинга на VPS с помощью LAMP
  • Перенос сайта c виртуального хостинга на VPS c помощью Vesta
  • Выпуск и установка SSL-сертификатов от Let’s Encrypt на VPS

Memcached в WordPress

Memcached Object Cache является самым популярным и надежным плагином для кэширования объектов на сервере Memcached. Он написан Райаном Борэном, одним из ведущих разработчиков ядра WordPress.

Для работы данного плагина вам потребуется расширение memcache для PHP, которое можно найти в официальном репозитории PECL. Установить данное расширение можно с помощью команды на вашем сервере:

sudo pecl install memcache

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

Установка плагина Memcached Object Cache отличается от установки других — вам не следует размещать плагин в директории wp-content/plugins, поскольку Memcached Object Cache является не типичным плагином, а так называемым дроп-ином (или вкраплением), который выполняется на самом раннем этапе загрузки ядра WordPress, и который не возможно отключить через панель администрирования.

Дроп-ины (или вкрапления) в WordPress

Файл object-cache.php из архива плагина следует разместить в директории wp-content, после чего плагин автоматически становится активным.

Если на данном этапе при посещении вашего сайта вы увидели «белый экран смерти», то причин может быть несколько:

  • Не установлен модуль memcache для PHP
  • Не запущен сервер Memcached
  • Нет доступа к серверу, например он сконфигурирован на другой порт

Конфигурация плагина

Интерфейса для конфигурации плагина Memcached Object Cache нет. Вся конфигурация происходит с помощью PHP файла, например :

define( 'WP_CACHE_KEY_SALT', '' );
$memcached_servers = array( '127.0.0.1:11211' );

Первая директива определяет префикс всех сохраняемых ключей на сервере

Важно установить уникальный префикс, если сервер обслуживает более одного сайта на WordPress, иначе может возникнуть конфликт ключей

Глобальный массив содержит адреса и порты всех серверов Memcached. Если вы используете стандартную конфигурацию, то вероятнее всего данный массив вам объявлять не нужно.

Чтобы отключить кэширование объектов в Memcached достаточно удалить или переименовать файл object-cache.php в директории wp-content. Учтите, что это не удалит данные на сервере. Если вы хотите удалить все данные с сервера, его необходимо перезагрузить или отправить команду .

Плагин Memcached Redux является альтернативой плагину Memcached Object Cache. Он использует класс Memcached и расширение для PHP memcached (а не memcache), которое так же можно установить из репозитория PECL.

SLAB

SLAB — это алгоритм выделения памяти. Он был создан для ее эффективного использования. Вся память делится на отдельные куски — слабы (slab). Каждый слаб содержит более мелкие куски — чанки (chunk). Когда в память нужно что-то сохранить, мы находим пустой слаб, в нем пустой чанк и записываем туда данные. Когда нужно будет сохранить что-то еще, мы переходим к следующему чанку и сохраняем данные в него.

Представьте, что вся память — это дом. Слабы — это квартиры, а чанки — это комнаты. Это эффективно, т.к. нам не нужно постоянно искать по всей памяти какое-то свободное место. Мы просто заполняем комнату, потом переходим к следующей комнате и т.п. И так пока вся память не будет заполнена.

Шаг 3: добавление авторизованных пользователей

Для добавления авторизованных пользователей в Memcached можно использовать SASL (расшифровывается как Simple Authentication and Security Layer — простой уровень аутентификации и безопасности). Этот фреймворк позволяет разделить механизмы аутентификации от прикладных протоколов. К тому же он предоставляет слой защиты данных. Более подробно о нем можно прочитать в Википедии.

Настройка поддержки SASL

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

Введите команду:

$ memcstat --servers="127.0.0.1"

Вы должны увидеть вот такой вывод:

Server: 127.0.0.1 (11211)

 pid: 2279

 uptime: 65

 time: 1546620611

 version: 1.5.6

. . .

Теперь нужно открыть конфигурационный файл:

$ sudo nano /etc/memcached.conf

В конце файла добавьте -S для того, чтобы включить SASL:

. . .

-S

И раскомментируйте строку -vv:

. . .

-vv

Это нужно для того, чтобы в /var/log/memcached формировался подробный отчет с предупреждениями, ошибками и другой важной информацией. После этого сохраните и закройте файл

После этого сохраните и закройте файл.

Снова перезапустите Memcached:

$ sudo systemctl restart memcached

Посмотрите логи, чтобы проверить, включен ли SASL:

$ sudo journalctl -u memcached

Вы должны увидеть такую строку:

. . .

Jan 31 15:34:28 memcached systemd-memcached-wrapper: Initialized SASL.

. . .

Еще раз введите команду:

$ memcstat --servers="127.0.0.1"

Так как теперь включен SASL, команда не будет выполнена без аутентификации.

Добавление аутентификации пользователя

Далее нужно загрузить пакет sasl2-bin, в нем есть программы администрирования базы данных пользователей SASL.

$ sudo apt install sasl2-bin

Теперь создайте директорию и файл с настройками SASL для Memcached:

$ sudo mkdir /etc/sasl2

$ sudo nano /etc/sasl2/memcached.conf

Добавьте в этот файл следующее:

mech_list: plain

log_level: 5

sasldb_path: /etc/sasl2/memcached-sasldb2

Если в mech_list, то есть в списке механизмов прописан plain, это значит, что cервер будет проверять идентификатор аутентификации и пароль на соответствие своей базе и наличие у данного идентификатора аутентификации права на идентификатор авторизации. Это аутентификация посредством открытого текстового пароля; путь к файлу будет указан позже. Сохраните и закройте этот файл.

Следующий шаг — создание базы данных SASL с данными вашего пользователя. Команда saslpasswd2 используется для занесения паролей в БД; ключ -c используется для создания записи для указанного идентификатора, если она не существовала ранее. Ключ -f позволяет указать путь к базе данных.

$ sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 имя_пользователя

Теперь нужно изменить права:

$ sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2

И перезапустить Memcached:

$ sudo systemctl restart memcached

Снова введите команду memcstat, но на этот раз с указанными до этого данными:

$ memcstat --servers="127.0.0.1" --username=имя_пользователя --password=пароль

Вы должны увидеть вывод:

Server: 127.0.0.1 (11211)

 pid: 2772

 uptime: 31

 time: 1546621072

 version: 1.5.6 Ubuntu

. . .

Если вы его увидели, значит, Memcached и SASL работают корректно.

Configure memcached

You need to edit /etc/sysconfig/memcached file, enter: Edit as follows:

PORT="11211"
USER="memcached"
MAXCONN="2048"
CACHESIZE="4096"       
OPTIONS="-l 10.10.1.5"

Where,

  • PORT: Listen on TCP port # 11211, the default is port 11211.
  • USER: Run memcached server as memcached user.
  • MAXCONN: Use 2048 max simultaneous connections; the default is 1024.
  • CACHESIZE: Use 4096 MB (4GB) memory max to use for object storage; the default is 64 megabytes.
  • OPTIONS=”-l 10.10.1.5″: Listen on 10.10.1.5. This is an important option to consider as there is no other way to secure the installation. Binding to an internal or firewalled network interface is suggested. In this example, IP address 10.10.1.5 is only accessible using LAN and is behind firewalled host.

Make changes as per your setup and requirements. Save and close the file.

Callbacks

Each method requires a callback function. Once this function get executed there
will be 2 variables applied:

  • : A error response if something went wrong while retrieving data from
    the Memcached server. Depending on the type of request this will either be an
    string or an Array with multiple errors.
  • : The actual result from the Memcached server. If the response is
    or than a cache miss occurred. Cache misses will also
    occur when there is an error. So you might want to check on errors first.

When we have a successful response, the context of the callback function will
shift to a metaData object. The metaData object contains all information that we
used to generate the request for the Memcached server. The metaData object
contains the following properties:

  • : Date in milliseconds when the request was received
  • : Total execution time for the request, including response parsing.
  • : Reference to the callback function
  • : The type of Memcached command
  • : The compiled command that was send through the sockets
  • : The properties of metaData object that needs type validation.

And all the arguments you have send to the method, this depends on the method
you have called.

Си

Библиотека libmemcached на данный момент активно развивается и представляется наиболее подходящим выбором при работе с Си и PHP. Также, в комплекте с самой клиентской библиотекой поставляются дополнительные утилиты для работы с memcached, позволяющие просматривать, устанавливать, удалять значения в кэше memcached. Кстати, удивляет, что набор утилит идет не с серверной частью, а с клиентской библиотекой.

man libmemcached
man libmemcached_examples

C библиотекой поставляются описание несложных примеров использования. За более интересными же способами применения имеет смысл заглянуть в исходные тексты утилит, благо все идет вместе.

Рекомендую обратить внимание на собранные утилиты. Наверняка многие из них станут верными помощниками при разработке приложений

  • — выдает информацию о сервере memcached
  • — выдает значение по ключу
  • — удаляет значение по ключу
  • — выдает список ключей

Для начала посмотрим, что скажет сервер memcached, запущенный нами немного ранее в режиме выдачи сообщений. Запросим статистику сервера при помощи утилиты memstat:

memstat --servers localhost

 Listing 1 Server
 Server: localhost (11211)
 pid: 14534
  uptime: 1950
 time: 1247390264
 version: 1.4.0
 pointer_size: 32
 rusage_user: 0.0
 rusage_system: 0.0
 curr_items: 0
 total_items: 0
 bytes: 0
 curr_connections: 10
 total_connections: 11
 connection_structures: 11
 cmd_get: 0
 cmd_set: 0
 get_hits: 0
 get_misses: 0
 evictions: 0
 bytes_read: 0
 bytes_written: 0
 limit_maxbytes: 67108864
 threads: 5

Получили статистику — следовательно memcached функционирует и откликается на запросы.

Итак, на настоящий момент готовы к использованию сервер memcached и клиентская библиотека. Осталось дело за малым — внедрить использование memcached в разрабатываемое приложение. Что касается приложения — все в руках разработчиков, а мы рассмотрим небольшой пример работы с базовыми функциями.

memcached предоставляет следующий набор основных функций (их, конечно, больше, но здесь приведены основные):

  • set — занести в кэш пару ключ-значение
  • add — занести в кэш значение при условии, что значения с таким ключом в кэше еще нет
  • replace — обновляет кэш при условии, что значение с таким ключом в кэше уже есть
  • get — получает значение из кэша по указанному ключу

Пример программы на C

Файл mc.c:

#include "stdio.h"
#include "string.h"
#include "memcached.h"

int main( void )
{
    char *key = "key";
    char *value = "value";
    uint32_t flags = ;
    size_t length = ;
    char *value2 = NULL;
    memcached_return rc;

    // 1. создать структуру для работы с кэшем
    memcached_st *memc = memcached_create(NULL);

    // 2. указать сервер с которым будем работать
    memcached_server_add(memc,"localhost",11211);

    // 3. занести пару ключ-значение в кэш
    rc = memcached_set(memc, key, strlen(key), value, strlen(value)+1, (time_t), flags);

    if (rc == MEMCACHED_SUCCESS) {
    } else {
        // обработать ошибку
    }

    // 4. получить значение
    value2 = memcached_get (memc, key, strlen(key),     & length, & flags, & rc);
    if (rc == MEMCACHED_SUCCESS) {
        printf("%s\n", value2);
        free(value2);
    } else {
        // обработать ошибку
    }

    // 5. высвободить структуру
    memcached_free(memc);
    return ;
}

Программа состоит из 5 основных операций и в особых комментариях не нуждается. Разве что можно отметить, что в пункте 2 можно добавлять много серверов, в случае использования распределенной системы.

Компилируем, возможно придется явно указать пути к библиотекам:

gcc -Wall -o mc mc.c -I/usr/local/include/libmemcached/ -lmemcached

Запускаем:

./mc
 value

Видим требуемое значение — должно быть, заработало!

Для уточнения деталей, смотрим сообщения на сервере memcached:

<32 new auto-negotiating client connection
32: Client using the ascii protocol
32 STORED
32 sending key key
>32 END
<32 quit
<32 connection closed.

В данном примере представлены следующие события: подключение клиента, установка пары ключ-значение, чтение данных по ключу и отключение клиента.

Посмотрим статистику на сервере:

memstat --servers localhost
 Listing 1 Server
 Server: localhost (11211)
 pid: 14534
 uptime: 4659
 time: 1247392973
 version: 1.4.0
 pointer_size: 32
 rusage_user: 0.0
 rusage_system: 0.0
 curr_items: 1
 total_items: 1
 bytes: 58
 curr_connections: 10
 total_connections: 13
 connection_structures: 11
 cmd_get: 1
 cmd_set: 1
 get_hits: 1
 get_misses: 0
 evictions: 0
 bytes_read: 58
 bytes_written: 58
 limit_maxbytes: 67108864
 threads: 5

Следующие две строчки показывают, что в кэше появилось значение:

curr_items: 1
total_items: 1

Посмотрим на данное значение:

memcat --servers localhost key
 value

Итак, приложение, использующее memcached — готово.

Настройка Memcached

Теперь, когда сервер установлен, его надо поднастроить. Это не сложно и не займёт много времени

Закрываем Memcached от доступа извне

Как вы видите, memcached висит на 11211 порту по умолчанию. Так как в memcached нет встроенных механизмов аутентификации, то выходит, что любой может подсоединиться извне и использовать его в своих целях. Чтобы избежать этого, вы можете либо закрыть порт 11211 с помощью фаервола, либо сконфигурировать memcached-сервер, чтобы он мог использоваться только с локального хоста. Ниже описан последний способ.

  1. Открываем конфигурационный файл

    vi /etc/memcached.conf
  2. Добавляем строку

    -l 127.0.0.1
  3. Перезагружаем memcached

    service memcached restart

    или

    /etc/init.d/memcached restart

И снова проверяем

netstat -tap | grep memcached

В итоге мы должны увидеть подобное

tcp 0  0 localhost.localdo:11211 *:*  LISTEN     13092/memcached

Также, после всех изменений не забудьте перезапустить Apache

service apache2 restart

Увеличиваем объём рабочей памяти Memcached

По умолчанию, в Memcached отведено на использование 64 мегабайта оперативной памяти. Я увеличу до 1024, вы исходите из параметров вашего сервера

  1. Открываем конфигурационный файл
    vi /etc/memcached.conf
  2. Находим значение
    -m 64
  3. Меняем его на
    -m 1024
  4. Перезапускаем memcached
    service memcached restart

Хранение сессий PHP в Memcached

Можно ускорить php, перенеся хранилище сессий из hdd в оперативную память с помощью memcached

Способ для расширения memcache

  1. Открыть
  2. Добавить
    session.save_handler = memcache
    session.save_path = "tcp://127.0.0.1:11211"
  3. Перезагрузить apache
    service apache2 restart

Способ для расширения memcacheD

  1. Открыть
  2. Добавить
    session.save_handler = memcached
    session.save_path = "127.0.0.1:11211"
  3. Перезагрузить apache
    service apache2 restart

Проверка phpinfo

Теперь нужно проверить, что имеем на выходе. Для этого, открываем страницу с phpinfo() и ищем в коде в столбце с локальными значениями. В значении должно быть или . Если значения не поменялись, смотрите конфиг домена в Апаче (например тут: ), а ищем

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

  php_value session.save_handler "memcache"
  php_value session.save_path "tcp://127.0.0.1:11211"
# memcached default config file
# 2003 - Jay Bonci <>
# This configuration file is read by the start-memcached script provided as
# part of the Debian GNU/Linux distribution.

# Run memcached as a daemon. This command is implied, and is not needed for the
# daemon to run. See the README.Debian that comes with this package for more
# information.
-d

# Log memcached's output to /var/log/memcached
logfile /var/log/memcached.log

# Be verbose
# -v

# Be even more verbose (print client commands as well)
# -vv

# Start with a cap of 64 megs of memory. It's reasonable, and the daemon default
# Note that the daemon will grow to this size, but does not start out holding this much
# memory
# Объём памяти в мегабайтах, который отведён для кеширования. По умолчанию, 64 мегабайта.
#-m 64
-m 1024

# Порт, на котором будет висеть Memcached, по умолчанию 11211
-p 11211

# Run the daemon as root. The start-memcached will default to running as root if no
# -u command is present in this config file
-u memcache

# Specify which IP address to listen on. The default is to listen on all IP addresses
# This parameter is one of the only security measures that memcached has, so make sure
# it's listening on a firewalled interface.
-l 127.0.0.1

# Limit the number of simultaneous incoming connections. The daemon default is 1024
#
# -c 1024

# Lock down all paged memory. Consult with the README and homepage before you do this
# -k

# Return error when memory is exhausted (rather than removing items)
# -M

# Maximize core file limit
# -r

Memcached и СУБД

Многие СУБД предоставляют встроенные средства кэширования, но на практике они умеют кэшировать только результаты запросов, что не всегда является именно тем, что необходимо веб-приложению. СУБД обычно полностью очищают кэш таблицы при каждом изменении данных, что приводит к полной его бесполезности при активном обновлении таблиц.

Еще один альтернативный вариант кэширования может предоставить http-сервер, в большинстве случаев кэш дублируется несколько раз для каждого процесса PHP, Perl или любого другого используемого языка программирования. Помимо излишних затрат оперативной памяти, такой вариант развития событий еще и снижает эффективность самого кэша.

Description

Cachify optimizes your page loads by caching posts, pages and custom post types as static content. You can choose between caching via database, on the web server’s hard drive (HDD), Memcached (only on Nginx) or — thanks to APC (Alternative PHP Cache) — directly in the web server’s system cache. Whenever a page or post is loaded, it can be pulled directly from the cache. The amount of database queries and PHP requests will dramatically decrease towards zero, depending on the caching method you chose.

Features

  • Works with custom post types.
  • Caching methods: DB, HDD, APC and Memcached.
  • “Flush Cache” button in the WordPress toolbar.
  • Ready for WordPress Multisite.
  • Optional compression of HTML markup.
  • White lists for posts and user agents.
  • Manual and automatic cache reset.
  • Automatic cache management.
  • Dashboard widget for cached objects.
  • Settings for Apache and Nginx servers.
  • Extendability via hooks/filters.

Support

  • Community support via the support forums on wordpress.org
  • We don’t handle support via e-mail, Twitter, GitHub issues etc.

Contribute

  • Active development of this plugin is handled on GitHub.
  • Pull requests for documented bugs are highly appreciated.
  • If you think you’ve found a bug (e.g. you’re experiencing unexpected behavior), please post at the support forums first.
  • If you want to help us translate this plugin you can do so on WordPress Translate.

Размеры чанков

Для того, чтобы работать с объектами разных размеров Memcache создает несколько разных слабов (квартир в доме), в которых находятся чанки разных размеров (в некоторых побольше, а в некоторых поменьше):

Когда приходит объект покрупнее, Memcache использует чанки из того слаба, в котором они большие. Главное, чтобы размер объекта был меньше, чем размер чанка. Слабы, в которых находятся чанки одинакового размера объединяются в классы (slabclass). Таким образом:

  • Slabclass определяет группу слабов с одинаковым размером чанков.
  • Slab содержит группу чанков.
  • Чанк — это кусочек памяти, в который сохраняются данные.

Если у нас большие чанки и много мелких объектов, мы рискуем использовать память очень неэффективно. Если объекты большие и много мелких чанков, то эти чанки не будут использованы. В обоих случаях мы не используем все место, которое можем.

Заключение к части 1

Кэширование является неотъемлемой частью любого «тяжёлого» web-приложения, и memcached — прекрасный выбор. Я лично много раз добивался успеха, используя ее. Выбрав memcached в качестве решения для кэширования, вы наверняка убедитесь в её эффективности.

Во второй части этой статьи мы рассмотрим интеграцию memcached в Grails-приложение. Это предоставит нам возможность изучить отличный и надежный комплекс инструментов для разработки масштабируемых web-приложений и заняться действительно увлекательной работой. А пока содержимое этой статьи является отличной отправной точкой для дальнейшего освоения memcached. Я рекомендую вам установить свой собственный экземпляр memcached и поэкспериментировать.

Похожие темы

  • Оригинал статьи
    memcached and Grails, Part 1: Installing and using memcached (EN).
  • «Распределенное кэширование с помошью Memcached» (Брэд Фицпатрик (Brad Fitzpatrick), Linux Journal, август 2004 г.): Брэд Фицпатрик из Danga Interactive знакомит с memcached.
  • «Архитектуры для балансировки серверной нагрузки: Архитектуры транспортного уровня» (Грегор Рот (Gregor Roth), JavaWorld, октябрь 2008 г.): балансировка нагрузки с помощью memcached на основе кэширования сообщений по нескольким машинам.
  • «Вопросы настройки производительности в вашей серверной среде» (Шон Волберг (Sean Walberg), developerWorks, январь 2009 г.): обзор взаимодействия различных компонентов web-приложения, включая общие проблемы производительности и решения, подобные кэшированию.
  • «Memcached — хороший или плохой знак для MySQL?» (Гэри Оренштайн (Gary Orenstein), Gigaom.com, май 2009 г.): обзор того, в какие места стека приложения вписывается memcached, и как легковесные альтернативные решения для кэширования бросают вызов СУБД.
  • Загрузить memcached: распределенная система кэширования в памяти.
  • Загрузить libevent: асинхронная библиотека оповещения о событиях.
  • Загрузить PuTTy: telnet-клиент для Windows.
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *