Redis

Введение

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

Прежде чем использовать Redis, необходимо установить пакет predis/predis версии ~1.0 через Composer.

Внимание: Если у вас установлено расширение Redis через PECL, вам нужно переименовать псевдоним в файле config/app.php.

Настройка

Настройки вашего подключения к Redis хранятся в файле app/config/database.php. В нём вы найдёте массив redis, содержащий список серверов, используемых приложением:

'redis' => [

    'cluster' => true,

    'default' => ['host' => '127.0.0.1', 'port' => 6379],

],

Если у вас Redis установлен на других портах, или есть несколько redis-серверов, дайте имя каждому подключению к Redis и укажите серверные хост и порт.

Параметр cluster ообщает клиенту Redis Laravel, что нужно выполнить фрагментацию узлов Redis (client-side sharding), что позволит вам обращаться к ним и увеличить доступную RAM. Однако заметьте, что фрагментация не справляется с падениями, поэтому она в основном используется для кэшировании данных, которые доступны из основного источника.

Если ваш сервер Redis требует авторизацию, вы можете указать пароль, добавив к параметрам подключения пару ключ/значение password.

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

Вы можете получить экземпляр Redis методом Redis::connection:

$redis = Redis::connection();

Так вы получите экземпляр подключения по умолчанию. Если вы не используете фрагментацию, то можно передать этому методу имя сервера для получения конкретного подключения, как оно определено в файле настроек.

$redis = Redis::connection('other');

Как только у вас есть экземпляр клиента Redis вы можете выполнить любую команду Redis.Laravel использует магические методы PHP для передачи команд на сервер:

$redis->set('name', 'Тейлор');

$name = $redis->get('name');

$values = $redis->lrange('names', 5, 10);

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

$values = $redis->command('lrange', array(5, 10));

Если у вас в конфиге определено одно дефолтное подключение, то вы можете использовать статические методы:

Redis::set('name', 'Тейлор');

$name = Redis::get('name');

$values = Redis::lrange('names', 5, 10);

Примечание: Laravel поставляется с драйверами Redis для кэширования и сессий.

Конвейер

Конвейер (pipelining) должен использоваться, когда вы отправляете много команд на сервер за одну операцию. Для начала выполните команду pipeline:

Отправка конвейером набора команд на сервер

Redis::pipeline(function($pipe)
{
    for ($i = 0; $i < 1000; $i++)
    {
        $pipe->set("key:$i", $i);
    }
});