Основы Мemcached | akvatopia.ru

Основы Мemcached

Нашел полезную статью про такого зверя как memcached. В последнее время о нем стали часто вспоминать во многих статьях и обзорах. Поэтому, представляю вашему вниманию краткое введение в основы Мemcached от создателя блога eax.me.

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

Также ничто не мешает использовать Memcached в качестве «не очень надежного» key-value хранилища. Например, в нем можно хранить сессии пользователей, коды капч или счетчик посетителей, находящихся в данный момент на сайте.

Установка Memcached под FreeBSD



Memcached очень прост в установке и настройке. Например, чтобы поднять его под FreeBSD, достаточно выполнить следующие шаги. Ставим бинарный пакет с мемкэшом:

1
pkg_add -r memcached

В /etc/rc.conf пишем:

1
2
memcached_enable="YES"
memcached_flags="-l 127.0.0.1 -m 1024"

Флагами мы говорим Memcached использовать не более 1 Гб памяти, а также принимать соединения только от приложений, запущенных на локалхосте. Запускаем сервер:

1
/usr/local/etc/rc.d/memcached start

Готово!

Использование Memcached в скриптах на Perl

Для работы с мемкэшом из Perl нам потребуется модуль Cache::Memcached:

1
cpan -i Cache::Memcached

Дополнение: См также Cache::Memcached::XS. Спасибо @xomaa за подсказку.

Рассмотрим простейший скрипт:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl


# memcached-example.pl
# (c) Alexandr A Alexeev 2012 | http://eax.me/

use Mojo::Base -strict;
use Cache::Memcached;

# если указать несколько серверов, данные будут распределяться
# между ними в зависимости от хэша ключа
my $cache = Cache::Memcached->new(
 servers => ['127.0.0.1:11211']
);

# присваиваем example_key значение 123
# (время жизни — 2 часа или меньше, если кончится память)
$cache->set(‘example_key’, 123, 60*60*2);
# увеличиваем значение example_key на 5
$cache->incr(‘example_key’, 5);
# считываем значение example_key
my $val = $cache->get(‘example_key’);

say "val = $val";

Запускаем:

1
2
./memcached.pl
 val = 128

Помимо чисел также можно хранить строки. Для хранения более сложных объектов требуется сериализация. Например, для сохранения массивов и хэшей можно воспользоваться модулем JSON::XS.

Текстовый протокол Memcached

Протокол, используемый Memcached, прост до безобразия:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ telnet localhost 11211
 Trying 127.0.0.1…
 Connected to localhost.
 Escape character is ‘^]’.
 version
 VERSION 1.4.10
 get example_key
 VALUE example_key 0 3
 128
 END
 decr example_key 3
 125
 delete example_key
 DELETED
 flush_all
 OK
 quit

Протокол Memcahced используется во многих приложениях помимо самого мемкэша. Например, через тот же модуль Cache::Memcached можно работать с MemcacheQ, MemcacheDB, а также Tarantool/Box. Но это — темы для отдельных заметок.

Коротко о главном

В отношении Memcached справедливы следующие утверждения:

  • Все данные хранятся в памяти для ускорения чтения-записи (не забудьте отключить swap!);
  • Максимальная длина ключа по умолчанию составляет 250 байт, а длина значения — 1 Мб;
  • Будьте осторожнее со спец-символами;
  • Ключи можно «расширить», воспользовавшись каким-нибудь MD5 или SHA512 (в этом случае нехэшированный ключ будет разумно продублировать в значении);
  • Если хочется хранить очень длинные значения, можно сжимать их и/или разбивать на части;
  • Memcached использует алгоритм кэширования LRU;
  • Весь ввод-вывод осуществляется с помощью libevent;
  • Для ускорения работы память выделяется при запуске демона и не освобождается до его остановки;
  • Для борьбы с фрагментацией памяти используется slab allocator;
  • Все операции являются атомарными, есть поддержка compare-and-swap;
  • С Memcached можно работать по UDP;
  • Помимо текстового протокола также существует бинарный;
  • Написан на Си, распространяется под лицензией BSD;
  • Используется в LiveJournal, Mail.ru, Twitter, Wikipedia, YouTube, Typepad и многих других проектах;

 

А если у вас задача усилить не прикладную, а именно сетевую инфраструктуру, тогда вам стоит задуматься о приобретении роутера cisco2911/k9. Этот мощный инструмент позволит вашей сети выйти на новый уровень стабильности и управляемости. Продукты компании cisco давно зарекомендовали себя как надежные решения, которые выбирают профессионалы отрасли.

Tweet
хорошоплохо (никто еще не проголосовал)
Loading...Loading...
0 Comments

Leave a Reply

Using Gravatars in the comments - get your own and be recognized!

XHTML: These are some of the tags you can use: <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>

Наши ссылки