Spec-Zone .ru
спецификации, руководства, описания, API
|
Cache::Memcached
модуль обеспечивает собственный интерфейс для протокола Memcache, и
оказывает поддержку для базовых функций, предлагаемых memcached.
Установите модуль, используя систему управления пакета Вашей операционной системы, или использование CPAN
:
root-shell> perl -MCPAN -e 'install Cache::Memcached'
Использовать memcached от Perl до Cache::Memcached
модуль, сначала создайте новое Cache::Memcached
объект, который определяет список
серверов и других параметров для соединения. Единственным параметром является хеш, содержащий опции для
интерфейса кэша. Например, чтобы создать новый экземпляр, который использует три memcached
сервера:
use Cache::Memcached;my $cache = new Cache::Memcached { 'servers' => [ '192.168.0.100:11211', '192.168.0.101:11211', '192.168.0.102:11211', ],};
При использовании Cache::Memcached
интерфейс с многократными
серверами, API автоматически выполняет определенные операции через все серверы в группе. Например, получая
статистическую информацию через Cache::Memcached
возвращает хеш, который
содержит данные на основе узла узлом, так же как обобщенную статистику для всех серверов в группе.
Можно установить дополнительные свойства на экземпляре объекта кэша, когда он создается, определяя опцию как часть хеша опции. Альтернативно, можно использовать соответствующий метод на экземпляре:
servers
или метод set_servers()
: Определяет список серверов, которые будут использоваться.
Список серверов должен быть ссылкой на массив серверов с каждым элементом как адрес и комбинация номера
порта (разделенный двоеточием). Можно также определить локальное соединение через сокет Unix (например
/tmp/sock/memcached
). Чтобы определить сервер с весом (указание, сколько
еще часто сервер должен использоваться во время хеширования), определите ссылку массива с memcached экземпляром сервера и числом веса. Более
высокие числа дают более высокий приоритет.
compress_threshold
или метод set_compress_threshold()
:
Определяет порог, когда значения сжимаются. Значения, больше чем конкретное количество, автоматически
сжимаются (использование zlib
) во время хранения и извлечения.
no_rehash
или метод set_norehash()
:
Отключает обнаружение нового сервера, если исходный выбор недоступен.
readonly
или метод set_readonly()
: Отключает записи к memcached серверам.
Однажды Cache::Memcached
объектный экземпляр был сконфигурирован, можно
использовать set()
и get()
методы, чтобы сохранить и
получить информацию от memcached серверов. Объекты, хранившие в
кэше, автоматически сериализируются и десериализовывали использование Storable
модуль.
Cache::Memcached
интерфейс поддерживает следующие методы для того, чтобы
хранить/получить данные, и коснитесь универсальных методов как показано в таблице.
Cache::Memcached Функция |
Эквивалентный Универсальный Метод |
---|---|
get() |
Универсальный get() . |
get_multi(keys) |
Становится многократным keys от memcache, использующего только
onequery. Возвращает ссылку хеша пар ключ/значение.
|
set() |
Универсальный set() . |
add() |
Универсальный add() . |
replace() |
Универсальный replace() . |
delete() |
Универсальный delete() . |
incr() |
Универсальный incr() . |
decr() |
Универсальный decr() . |
Ниже полный пример для того, чтобы использовать memcached с Perl и
Cache::Memcached
модуль:
#!/usr/bin/perluse Cache::Memcached;use DBI;use Data::Dumper;# Configure the memcached servermy $cache = new Cache::Memcached { 'servers' => [ 'localhost:11211', ], };# Get the film name from the command line# memcached keys must not contain spaces, so create# a key name by replacing spaces with underscoresmy $filmname = shift or die "Must specify the film name\n";my $filmkey = $filmname;$filmkey =~ s/ /_/;# Load the data from the cachemy $filmdata = $cache->get($filmkey);# If the data wasn't in the cache, then we load it from the databaseif (!defined($filmdata)){ $filmdata = load_filmdata($filmname); if (defined($filmdata)) {# Set the data into the cache, using the key if ($cache->set($filmkey,$filmdata)) { print STDERR "Film data loaded from database and cached\n"; } else { print STDERR "Couldn't store to cache\n"; } } else { die "Couldn't find $filmname\n"; }}else{ print STDERR "Film data loaded from Memcached\n";}sub load_filmdata{ my ($filmname) = @_; my $dsn = "DBI:mysql:database=sakila;host=localhost;port=3306"; $dbh = DBI->connect($dsn, 'sakila','password'); my ($filmbase) = $dbh->selectrow_hashref(sprintf('select * from film where title = %s', $dbh->quote($filmname))); if (!defined($filmname)) { return (undef); } $filmbase->{stars} = $dbh->selectall_arrayref(sprintf('select concat(first_name," ",last_name) ' . 'from film_actor left join (actor) ' . 'on (film_actor.actor_id = actor.actor_id) ' . ' where film_id=%s', $dbh->quote($filmbase->{film_id}))); return($filmbase);}
Пример использует базу данных Sakila, получая пленочные данные из базы данных и пишущий составную запись фильма и агентов к memcached. Когда вызов этого для фильма не существует, Вы получаете этот результат:
shell> memcached-sakila.pl "ROCK INSTINCT"Film data loaded from database and cached
Получая доступ к фильму, который был уже добавлен к кэшу:
shell> memcached-sakila.pl "ROCK INSTINCT"Film data loaded from Memcached