Установите несколько ключей с несколькими значениями на Redis - PullRequest
0 голосов
/ 29 июня 2018

У меня есть php-сервер, использующий phpredis (клиент php для сервера redis) для хранения пар ключ-значение на сервере Redis. Данные, которые мне нужно хранить, имеют следующую форму:

"key1" => "v1", "v2", "v3"
"key2" => "m1", "m2", "m3"
"key3" => "n1", "n2", "n3"
...

Основываясь на моих исследованиях, я могу установить несколько ключей в Redis с помощью команды mset, например, так:

$redis->mSet(array('key0' => 'value0', 'key1' => 'value1'));

Но на самом деле мне нужно что-то вроде этого:

$redis->mSet(array('key0' => array('v1','v2','v3') , 'key1' => array('m1', 'm2', 'm3')));

Но это просто хранит значение для каждого ключа как "Массив" вместо фактического указанного массива.

Возможно ли это сделать с помощью одной команды, такой как mset, или мне нужно перебрать свои данные и установить каждый ключ отдельно, используя что-то вроде lPush?

Документация phpredis: https://github.com/phpredis/phpredis

1 Ответ

0 голосов
/ 29 июня 2018

Таким образом, вместо использования mSet вы, вероятно, можете использовать sADD для получения желаемой функциональности.

$redis->sAdd($key, ...$data);

Полная документация по нему здесь .

Это будет означать итерацию и выполнение этого в несколько этапов, для которых я бы рекомендовал прочитать в Redis Pipelines и подключаемый модуль link без стыда, который содержит больше информации.

Что бы выглядеть примерно так;

$redis    = new Redis();
$pipeline = $redis->multi(Redis::PIPELINE);

foreach ($dataset as $data) {
    $pipeline->sAdd($data['key'], ...$data['values']);
}

$pipeline->exec();

Я не могу придумать способ сделать это в особой операции, может прийти кто-то другой, кто знает больше меня:)


Редактировать: Похоже, я немного неправильно понял ваш вопрос, так как он был более сфокусирован на выполнении одной операции. Надеюсь, что выше все еще полезно, но, насколько мне известно, вам придется делать это с несколькими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...