user-avatar
Today is Четверг
23.02.2012

Tag: REDIS

19.09.2011

Использование REDIS и Redis php library. Часть 2 – использование библиотеки.

by admin — Categories: Веб разработка — Tags: , , , , , , 1 Comment

Далие следует рассказать про ключ значение. Для работы с redis используется понятие

«Ключ=>значение» как ассоциативный массив. Где ключём является не кий виртуальный массив данных (значений). Представьте себе таблицу

Ключ Значение 1
Значение 2
Значение 3
…..
Значение n

Существует несколько разных типов ключей.

  • Strings
  • Lists
  • Sets
  • Sorted sets
  • Hashes

Самый простой типа это Strings.

Ключ значения которого это просто строки или много строк.

//определим настройки соединения с сервером$options = array(

‘namespace’ => ‘Application_’,

‘servers’ => array(

array(‘host’ => ’127.0.0.1′, ‘port’ => 6379)

)

);

include_once («Rediska.php»); //подключаем библиотеку

$rediska = new Rediska($options);

$key = new Rediska_Key(‘time’);// так мы определим ключ с именем ‘time’

$time = time();

$key->setValue($time); //так мы запишем значение в ключ

echo $key->getValue(); // вывод текущего значения ключа

Замечу что если повторно выполнить запись в ключ setValue то значение перезаписывается.

И работать с данными в таких ключах стоит как со строковыми переменными.

 

Далее рассмотрим пример работы с типом Lists (списки)

$list = new Rediska_Key_List(‘list’); // так мы определим ключ с именем ‘list’

$list->append(‘Apple’);

$list->append(‘Orange’);

Добавляем вконец списка сначала элемент ‘Apple’ затем ‘Orange’

$newarray = $list->toArray(true); //Если установлен параметр в true это означает,

что массив будет иметь итератор

Далее мы можем работать с массивом и удалять элементы из списка.

foreach($newarray as $key=>$item){

$list->remove($item->value); //Таким образом мы удалим все элементы списка

}

Рассмотрим пример работы с типом ключей Sets и Sorted sets

Этот тип особенно интересен так как мы можем использовать так называемые индексы значений

более-ммение в полной мере. Предположим что нам нужно хранить время входа пользователя на сайт.

Создадим сет и будем поочерёдно добавлять логин пользователя и время в формате unix timestamp.

$users = new Rediska_Key_Set(«sets»);

$users->add(‘Alexandr’,time());

$users->add(‘Oleg’,time());

$users->add(‘Ivan’,time());

Таким образом мы сформируем список пользователей с дополнительным полем – индексом в

нашем случае меткой времени.

Теперь допустим нам нужно удалить из сета пользователей. $rows = $users->toArray(true);

foreach($rows as $key=>$item){

$users->remove($item->value); //Таким образом мы удалим все элементы списка

} //Теперь рассмотрим пример удаления пользователей с использованием индекса в нашем случае метки времени.

foreach($rows as $key=>$item){

$users->removeByScore(1258125887,1258135887); //Сдесь укажем диапазон если нужен один пользователь и мы знаем время то укажем 2 одинаковых значения

}

Отличие таких ключей от Sorted sets ключей в том, что в сортированных сетах есть сортировка по полю score Это полезно при выводе данных которые должны быть отсортированы по индексу.

Теперь рассмотрим тип ключей Hashes. Эти ключи подобны ассоциативным массивам в PHP.

$user = new Rediska_Key_Hash(‘user’);

$user->set(array(‘Name’ => ‘Alex’, ‘lastName’ => ‘Ivanov’, ‘viewed’ => 1));

$user->set(array(‘Name’ => ‘Oleg’, ‘lastName’ => ‘Petrov’, ‘viewed’ => 0));

//Так мы добавим массив в данный сет // показать такие данные можно через обычный цикл

foreach($user as $field => $value) {

print «$field => $value»;

}

Все возможные методы можно посмотреть сдесь

ЧАСТЬ 1 Использование REDIS и Redis php library

25.08.2011

Использование REDIS и Redis php library. Часть 1 – установка.

Redis — документо-ориентированное сетевое журналируемое хранилище данных типа «ключ-значение» с открытым исходным кодом. Хранит базу данных в оперативной памяти, снабжена механизмами снимков для обеспечения постоянного хранения. Имеет библиотеки для работы со многими существующими языками программирования.

По сути своей redis ничто иное как noSQL база данных. Поскольку данные хранятся в оперативной памяти поэтому операции запись/чтение производятся очень быстро видел даже что пишут до 100 тыс. операций в минуту. Правда это или нет доказывать не стану, но одно знаю точно это очень весомая альтернатива mysql базам данных значительно превосходящая по скорости. Естественно для работы с redis-ом было придумано и написано много библиотек в частности для php5. Но для начала я хочу рассказать зачем это нужно и где оно используется.

Допустим мы имеем большой корпоративный сайт со своей сложной структурой, где есть всевозможные списки новостей статей пользователей, чаты или обмен сообщениями и куча всяческих компонетов. Естественно большие корпоративные сайты имеющее множество гигабайтов информации тысячи пользователей  и кучу таблиц в своей базе данных рано или позно сталкиваются с проблемой оптимизации. Особенно если приходится постоянно вытягивать из базы данных сложные запросы с тысячями элементов. В итоге когда данных очень много таблици баз данных перегружены, поисковые запросы выполняются по 30 секунд, а выборки больших списков до 1 минуты, наступает время оптимизировать систему. Некоторые обращаются к файловому Кешу данных. Некоторые до минимализма сокращают запросы переводя динамику в статику и так далее. Но бывают случаи когда данные на странице невозможно кешировать и нужно отдавать динамически в зависимости от действий пользователя причём в большом количестве к примеру списки пользователей или мгновенные сообщения будь то чат или гостевая книга. В таком случае я рекомендую использовать Redis.

 

Установка.

Скачать php библиотеку для работы c  redis вы можете по этой ссылке http://rediska.geometria-lab.net/download/latest. Кстати http://rediska.geometria-lab.net/ это официальный сайт этой библиотеки где русские разработчики пишут почему-то всё на английском. Инcталировать сам сервер под ОС linux очень просто допустим в ubuntu это просто:

 apt-get install redis

Естественно на старнице сайта http://rediska.geometria-lab.net/documentation/get-started/ вы можете увидеть иные способы инсталляции. После того как сервер установлен и запущен вы можете создавать структуру сайта и скопировать в какую либо директорию распакованную библиотеку которая посути выглядит как одна папка с файлами.

Дерево директории может выглядеть вот так.

 

../MyProject/

/Rediska/                  –папка с библиотекой

Index.php

Config.php

Rediska.php               –главный файл библиотеки

Итак нам нужно правильно подключить и настроить библиотеку redis для дальнейшего использования. Допустим пусть вся конфигурация будет описана в файле Config.php который в свою очередь инклудится в index.php.

 

$options = array(
    'namespace' => 'Application_',
    'servers'   => array(
         array('host' => '127.0.0.1', 'port' => 6379)
    )
);

 

include_once («Rediska.php»);

 

$rediska = new Rediska($options);

 

Таким образом мы подключили библиотеку и указали в опциях что сервер находится на адресе 127.0.0.1 порту 6379.(стандартный порт)

 

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

Част ь 2 Использование REDIS и Redis php library

 

 

© 2012 asad`s page All rights reserved - Wallow theme v0.46.4 by ([][]) TwoBeers - Powered by WordPress - Have fun!