Использование 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

Новые заметки:

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

Последние комменты:

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

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

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