Rediska - адаптеры Redis для Zend Framework
|
Опубликовано: 04.12.2009
|
Redis - это очень быстрая key-value база данных. Может использоваться как memcached, но отличие от последней в том, что Redis сохраняет свои данные на диск, то есть может быть использован для хранения данных (что мы успешно и делаем). Основные отличии от других собратьев это возможность хранить более сложные структуры данных - списки и "сеты" и атомарные операции с ними.
Подробнее почитать о Redis вы сможете на домашней странице проекта.
Далее речь пойдет о Rediska - клиенте для базы данных Redis.
Основные возможности:
- Полная интеграция с Zend Framework
- Работа с несколькими серверами
- Несколько алгоритмов "размазывания" ключей по серверам: "consistent hashing" и crc32. Причем подключить свой не составит труда.
- Работа с ключами как с объектами
- Работа с списками и "сетами", как с обычными PHP массивами
- Юнит тесты и документация
Хочу подробнее остановится на интеграции с Zend Framework
Конфигурация и bootstraping
- Копируем Rediska в папку library
- Добавляем в 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)
Подробнее вы можете почитать на домашней странице проекта.
- Спрашивать почему у вас не работает код, для этого есть тема форума закрепленная за статьей.
- Спрашивать как реализовать ту или иную функциональность, для этого необходимо создать свою тему на форуме.
Комментарии для того чтобы: высказать свое аргументированное мнение о статье, указать какие участки вызывают непонимание, что нужно исправить/улучшить, просто сказать спасибо.
Комментарии имеют древовидную структуру.
Если вы хотите ответить на определенный комментарий - нажмите на ссылку "Ответить" возле этого комментария.

