Я использую phpredis в своем приложении, и у меня следующая структура данных. Идентификатор учетной записи выступает в качестве ключа для каждого пользователя:
$data = array(
"accId1"=> array("userId" => "user0234", "username" => "apples", "appversion" => "1.0"),
"accId2"=> array("userId" => "user2342", "username" => "roses", "appversion" => "2.0")
....
);
Для хранения вышеупомянутого в Redis я использую конвейеры так:
$pipeline = $redis->multi(Redis::PIPELINE);
foreach ($data as $accId => $userInfo) {
$pipeline->hMSet($accId, $userInfo);
}
$pipeline->exec();
Для поиска:
$accIdSet = getAccountIds();
$pipeline = $redis->multi(Redis::PIPELINE);
foreach ($accIdSet as $accId) {
$pipeline->hMGet($accId, array("userId", "username", "appversion"));
}
return $pipeline->exec();
Возвращает следующий массив:
(
[0] => Array
(
[userId] => user0234
[username] => apples
[appverion] => 1.0
)
[1] => Array
(
[userId] => user2342
[username] => roses
[appversion] => 2.0
)
)
Это все хорошо, за исключением индекса массива. Система, над которой я работаю, требует, чтобы индексы были фактическим ключом, хранящимся в Redis, а не числовым индексом, который у него есть в настоящее время.
Теперь я знаю, что могу перебрать этот массив и использовать некоторый PHP, чтобы изменить индекс на фактический ключ, но прежде чем перейти туда, я хотел бы знать, есть ли у меня гораздо более эффективный и более чистый вариант для решения этой проблемы.
Я открыт для любых предложений, даже если они меняют функции, которые я использую для взаимодействия с Redis. Спасибо!