framework.zend.com
Stable релиз 2.0 / 1.12

Rediska - адаптеры Redis для Zend Framework

К комментариям

Redis - это очень быстрая key-value база данных. Может использоваться как memcached, но отличие от последней в том, что Redis сохраняет свои данные на диск, то есть может быть использован для хранения данных (что мы успешно и делаем). Основные отличии от других собратьев это возможность хранить более сложные структуры данных - списки и "сеты" и атомарные операции с ними.

Подробнее почитать о Redis вы сможете на домашней странице проекта.

Далее речь пойдет о Rediska - клиенте для базы данных Redis.

Основные возможности:

  • Полная интеграция с Zend Framework
  • Работа с несколькими серверами
  • Несколько алгоритмов "размазывания" ключей по серверам: "consistent hashing" и crc32. Причем подключить свой не составит труда.
  • Работа с ключами как с объектами
  • Работа с списками и "сетами", как с обычными PHP массивами
  • Юнит тесты и документация

Хочу подробнее остановится на интеграции с Zend Framework

Конфигурация и bootstraping

  1. Копируем Rediska в папку library
  2. Добавляем в application.ini конфигурацию
    Redis  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

Более подробную информацию по конфигурации вы сможете прочитать в документации на офицальном сайте.

Zend_Auth адаптер

Если вы храните данные ваших пользовтелей в Redis то вам скорее всего понадобиться их авторизовывать.

$auth = Zend_Auth::getInstance();

/**
* userIdKey - Redis key where you store relation between login and id. * replaced to identity (login)
* userDataKey - Redis key where you store user data
* credentialAttributeName - Name of credential (password) attribute in user data
* userDataIsArray - Set true if you store user data in associative array
* identity - User identity (login) for authorization
* credential - User credintial (password) for authorization
* rediska - Rediska instance.
*/
$options = array(
'userIdKey' => 'user_id_*',
'userdatakey' => 'user_*',
);
$adapter = new Rediska_Zend_Auth_Adapter_Redis($options);

// Set login and password
$adapter->setIdentity('john')
->setCredential('god');

// Authorization
$result = $auth->authenticate($adapter);
if ($result->isValid()) {
echo 'Success';
} else {
echo 'Login or password invalid';
}

Бэкэнд для Zend_Cache

Redis замечательно подходит для кеширования данных:

 // Core frontend options
$frontendOptions = array(
'cache_id_prefix' => 'Application_'
);
// Rediska options
$backendOptions = array(
'servers' => array(
array('host' => '127.0.0.1', 'port' => 6379)
)
);

$cache = Zend_Cache::factory(
'Core',
'Rediska_Zend_Cache_Backend_Redis',
$frontendOptions,
$backendOptions,
false,
true
);

$data = array(1, 2, 3);
$cache->save($data, 'data');

Zend_Log writer

Если вы решили хранить в редисе логи - пожалуйста:

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

$writer = new Rediska_Zend_Log_Writer_Redis(
'keyName',
$options
);

$log = new Zend_Log($writer);

Если не указывать конфигурацию, то Writer использует ранее инициализированную Редиску.

Zend_Queue адаптер

Redis просто создан для того чтобы хранить очереди, использую для этого списки:

 $options = array(
'adapterNamespace' => 'Rediska_Zend_Queue_Adapter',
// Rediska options
'driverOptions' => array(
'namespace' => 'Application_'
)
);

$queue = new Zend_Queue('Redis', $options);

Если не указывать конфигурацию, то адаптер использует ранее инициализированную Редиску.

Zend_Session save handler

Мы используем редис также для хранения сессий:

 $options = array(
'keyPrefix' => 'SESSIONS_',
'lifetime' => 60 * 15 // 15 minutes
'servers' => array(
array('host' => '127.0.0.1')
)
);

$saveHandler = new Rediska_Zend_Session_SaveHandler_Redis($options);

Zend_Session::setSaveHandler(saveHandler)

Подробнее вы можете почитать на домашней странице проекта.

Лучший способ следить за обновлениями сайта это подписаться на RSS
Если информация была полезной для вас, вы можете поддержать сайт.
Комментарии:
Yaroslav Vorozhko 07.12.2009 13:47 #
Спасибо!
Как я понял, пока что включать в репозиторий его не планируется.
Или уже есть proposal?
Ответить
Ivan Shumkov 08.12.2009 10:25 #
Пока нету. Если у вас желание, вы можете помочь нам в этом :)
Ответить
IgorN 08.12.2009 16:48 #
Интересно. А есть реальные приложения работающие на этой базе?
Ответить
aleks_raiden 11.12.2009 22:52 #
На главной странице проекта приведен список использующих. Ну конечно это те, кто рассказал. Из очень известных - Github
Ответить
Oleg Lobach 29.12.2009 17:03 #
Кто-нибудь в курсе почему сайт редиски который день недоступен?
Ответить
Ivan Shumkov 31.03.2010 07:23 #
Сгорел хард на сервере. Уже поправили.
Ответить
AndreySch 03.03.2010 07:41 #
Ivan Shumkov, может быть, Вы сможете выложить Redisky на какой-нибудь другой сервер? Очень хочется попробовать.
Ответить
Ivan Shumkov 31.03.2010 07:23 #
github.com/shumkov/rediska
Ответить
Ivan Shumkov 31.03.2010 07:24 #
Кстати сайт давно уже функционирует.
Ответить
Алексей 29.04.2010 00:04 #
Иван, подскажите пожалуйста, поддерживает ли адаптер Rediska удаление кеш файлов по тегам? Не могу ничего найти по этому поводу.

Пример слишком простой с кешированием и не даёт ответа на этот вопрос.

Поддерживается ли тегирование?
Ответить
Алексей 29.04.2010 23:24 #
Посмотрел в коде - тегирование не поддерживается.
Ответить
freeneutron 17.12.2010 08:30 #
А есть Rediska_Zend_Db_Adapter_Redis ?
Ответить
Уважаемые пользователи. Комментарии не для того чтобы:
  1. Спрашивать почему у вас не работает код, для этого есть тема форума закрепленная за статьей.
  2. Спрашивать как реализовать ту или иную функциональность, для этого необходимо создать свою тему на форуме.

Комментарии для того чтобы: высказать свое аргументированное мнение о статье, указать какие участки вызывают непонимание, что нужно исправить/улучшить, просто сказать спасибо.

Комментарии имеют древовидную структуру.
Если вы хотите ответить на определенный комментарий - нажмите на ссылку "Ответить" возле этого комментария.

Комментарии не соответствующие этим правилам могут быть удалены. Спасибо за понимание.
Комментарии временно отключены, вы можете воспользоваться форумом.