В настоящее время я использую 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 не может установить дату истечения срока действия, когда я использую мульти (функция mSet).
Любое решение?
MSET
не поддерживает EX
а также PX
варианты доступны с SET
, У вас есть 2 варианта в зависимости от ваших потребностей:
Если вам нужно, чтобы это было атомарно, используйте либо операции или же Сценарии Lua. Пример с транзакциями (из redis-cli
) будет выглядеть так:
> МУЛЬТИ
Хорошо
> SET key1 value1 EX 10
QUEUED
> SET key2 значение2 EX 10
QUEUED
> EXEC
Я не знаком с phpredis, но он, вероятно, имеет абстракцию, которая обрабатывает это для вас.
SET
команды.Других решений пока нет …