Функция phpredis mSet с ttl

В настоящее время я использую memcached, но я пытаюсь перенести этот механизм на redis.

Моя цель - сохранять весь массив (ключ => значение) каждые 1000 итераций.

Старое решение:

<?php
$data = array(
    'key1' => 'value1',
    'key2' => 'value2',
    'key3' => 'value3'
);
$memcached->setMulti($data, time()+864000);

Новое решение:

<?php
$data = array(
    'key1' => 'value1',
    'key2' => 'value2',
    'key3' => 'value3'
);
$redis->mSet($data);

Работа этих скриптов практически идентична.

Как видите, redis не может установить дату истечения срока действия, когда я использую multi (функция mSet).

Любое решение?


person Jarek Kowol    schedule 09.06.2016    source источник


Ответы (1)


MSET не поддерживает параметры EX и PX, доступные с SET. У вас есть 2 варианта в зависимости от ваших потребностей:

  • Если вам нужно, чтобы это было атомарным, используйте либо транзакции, либо Скрипты Lua. Пример с транзакциями (от redis-cli) будет выглядеть так:

    > МУЛЬТИ

    OK

    > УСТАНОВИТЬ ключ1 значение1 EX 10

    В ОЧЕРЕДИ

    > УСТАНОВИТЬ ключ2 значение2 EX 10

    В ОЧЕРЕДИ

    > EXEC

Я не знаком с phpredis, но, вероятно, у него есть абстракция, которая сделает это за вас.

  • Если вам не нужна атомарность, вы можете просто использовать конвейерную обработку с несколькими SET командами.
person Duru Can Celasun    schedule 09.06.2016