Предисловие — как использовать массив с функцией zadd?

Я только начал использовать Predis для миграции Redis, и у меня возникают проблемы с настройкой функции zadd для работы с массивом.

Этот код работает:

foreach ($userIndexArr as $row) {
$usernames[] = 0;
$usernames[] = $row['username'];
$result = $this->cache->zadd('@person', 0, $row['username']);
}

Это не:

foreach ($userIndexArr as $row) {
$usernames[] = 0;
$usernames[] = $row['username'];
}
try {
$result = $this->cache->zadd('@person', $usernames);
} catch (Exception $e) {
echo 'Caught exception: ',  $e->getMessage(), "\n";
}

И никакой ошибки не выбрасывается. Любая помощь высоко ценится!

-J

4

Решение

Я поиграл с этим, и если вы боретесь с этим, следующий пример наверняка поможет (следуя документы redis.io пример):

$predis->zadd( 'myset', [ "one" => 1, "uno" => 1, "two" => 2, "three" => 3 ] )

это приведет к тому же отсортированному набору, что и в примере с Redis:

ZADD myzset 1 "one"ZADD myzset 1 "uno"ZADD myzset 2 "two" 3 "three"

Сложность в том, что если вы хотите сделать это в одной строке в Redis, вы бы поставили оценки на первое место, например, так:

ZADD myzset 1 "one" 1 "uno" 2 "two" 3 "three"

в Predis это также будет работать:

$predis->zadd( 'myset', 1, "one", 1, "uno", 2, "two", 3, "three" );
1

Другие решения

При использовании predis вы должны отправить участника в качестве ключа и счет в качестве значения

$predis->zadd('your:table', array('member' => 'score');

для примеров в Redis документы это было бы:

$predis->zadd('myzset', array('uno' => 1, 'two' => 2);
1

Попробуйте ниже, в соответствии с этим источником: https://github.com/nrk/predis/blob/v1.0/src/Command/ZSetAdd.php

foreach ($userIndexArr as $row) {
$usernames[$row['username']] = 0;
}
try {
$result = $this->cache->zadd('@person', $usernames);
} catch (Exception $e) {
echo 'Caught exception: ',  $e->getMessage(), "\n";
}

Не проверено, хотя. Но я думаю, что это работает, если вы используете v1.0 =)

0
По вопросам рекламы [email protected]