Использование Redis в PHP

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

Redis хранит весь набор данных в памяти, поэтому скорость обращения к данным просто сумасшедшая: 81 тысяча операций чтения в секунду, 110 тысяч операций записи в секунду. Время от времени данные записываются на диск в асинхронном режиме, либо каждое изменение записывается в файл, открытый только для добавления.

Что касается списков - да, вы можете хранить серилизованные массивы и в Memcache. Но каждый раз при изменении одного элемента приходится переписывать весь массив, что крайне неудобно - в отличие от Redis.

В сети можно найти множество ресурсов о Redis, однако большинство из них на английском языке, и предназначены они для более продвинутых разработчиков. Следуя данной адаптированной статье, вы пройдете первые шаги PHP-программиста при работе с Redis.

1) Для того, чтобы установить сервер на Ubuntu / Debian, выполните эту простую команду:

aptitude install redis-server
2) Существует много реализаций клиента для PHP. Самая известная носит простое русское имя "Редиска". Чтобы установить последние исходники Редиски и скопировать в /usr/share/php/ для удобного инклуда, выполните команду:

cd /usr/src
[ -d Rediska ] || git clone git://github.com/Shumkov/Rediska.git
cd Rediska && git pull && rsync -a ./library/ /usr/share/php/
Если вы используете Zend Framework, то после помещения Редиски в папку library, придется прописать ее в кофигурационном файле application.ini таким образом:

autoloaderNamespaces[] = "Rediska"

pluginpaths.Rediska_Zend_Application_Resource = "Rediska/Zend/Application/Resource"

resources.rediska.namespace = "Application_"
resources.rediska.servers.0.host = '127.0.0.1'
resources.rediska.servers.0.port = 6379
3) Чтобы сохранить свои данные, можно скопировать файл БД в надежное место. В ubuntu этот файл лежит в /var/lib/redis/. Redis записывает данные во временный файл, поэтому при копировании они не пострадают.

4) Существует 4 типа данных, с которыми можно работать: ключи, списки, наборы и сортированные наборы.

Ключи

В качестве примера рассмотрим инициализацию ключа 'firstname':

require_once 'Rediska/Key.php';
$myKey = Rediska_Key('firstname');
Теперь давайте установим ему значение 'danil':

$myKey->setValue('danil');
Метод setValue() тотчас сохраняет значение 'danil' в памяти. А также сохранит впоследствии и на диск, поэтому можно не беспокоиться о потере значения.

В дальнейшем вы можете обратиться к этому имени, инициализируя ключ 'firstname' (если он еще не проинициализирован) и вызывая следующий метод:

echo $myKey->getValue();

Списки

Список - это коллекция несортированных элементов. Добавление новых элементов в списки Redis происходит в реальном времени и с постоянной скоростью. Это означает что добавление элемента к списку из 10 элементов происходит с той же скоростью, что и добавление элемента к списку из 10 миллионов элементов. Однако поиск элементов по индексу производится менее быстро. Поэтому используйте списки Redis для обращения к данным в том же порядке, в каком они были добавлены. Например, очередь сообщений - идеальный пример такого списка.

Работа со списками Redis в PHP осуществляется следующим образом:

require_once 'Rediska/Key/List.php';
$myList = new Rediska_List('names');

// Запись
$myList->append('danil');
$myList[] = 'pavel';

// Чтение
foreach($myList as $name){
echo $name . "\n";
}

Наборы

Набор - это коллекция уникальных несортированных элементов. Практически это хеш-таблица, где все значения выставлены в true. По существу, здесь не важны значения, а важны ключи.

В Redis мы добавляем элементы в качестве ключей, поэтому они будут уникальными, и можно будет выполнить такие операции, которые невозможны со списками:

Тестирование того, существует ли уже данный элемент
выполнение пересечения
объединения
разности между несколькими наборами
и т.д.
Работать с наборами нужно так:

require_once 'Rediska/Key/Set.php';
$mySet = new Rediska_Set('names');

// Запись
$mySet->add('danil');
$mySet[] = 'pavel';
$mySet->add('pavel');
// уже не сработает, только один элемент 'pavel' может быть в наборе

// Чтение
foreach ($mySet as $name){
echo $name;
}

Сортированные наборы

Сортированные наборы всегда упорядочиваются по своему значению. В этом порядке они и хранятся. Поэтому в любой момент при обращении к данному набору, он уже отсортирован независимо от того, что вы добавили. На примере набора с отмеченными датами рождения - если мы будем добавлять новых людей, то автоматически более взрослые окажутся в верхней части списка, а более молодые в нижней:

require_once 'Rediska/Key/SortedSet.php';
$sortedSet = new Rediska_Key_SortedSet('birthyears');

// Запись
$sortedSet['danil'] = 1983;
$sortedSet->add('pavel', 1979);

// Чтение
foreach ($sortedSet as $name){
echo $name . " родился в ";
echo $sortedSet->getScore($name) . "\n";
}

Оцени публикацию:
  • 0,0
Оценили человек: 0

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2018 YaPro.Ru

Главная » Веб-мастеру » PHP »