Redis 将列表与哈希表匹配
我使用以下方法为一些项目设置了哈希表:Redis 将列表与哈希表匹配,redis,Redis,我使用以下方法为一些项目设置了哈希表: RPUSH itemList:0 A RPUSH itemList:0 B RPUSH itemList:0 C HSET items item:A A_VALUE HSET items item:B B_VALUE HSET items item:C C_VALUE 我目前正在使用: LRANGE itemList:0 0 5 要获取项目列表,[“a”、“B”、“C”] 我如何修改它以获得带有{“A”:“A_值”,“B”:“B_值”,“C”:“C_
RPUSH itemList:0 A
RPUSH itemList:0 B
RPUSH itemList:0 C
HSET items item:A A_VALUE
HSET items item:B B_VALUE
HSET items item:C C_VALUE
我目前正在使用:
LRANGE itemList:0 0 5
要获取项目列表,[“a”、“B”、“C”]
我如何修改它以获得带有
{“A”:“A_值”,“B”:“B_值”,“C”:“C_值”}
?如果没有脚本,就无法执行此操作
如果您的redis版本低于2.6,则只能使用以下代码(简单php版本):
如果您使用的是Redis2.6+,那么可以编写LUA存储过程来获取数据(与php逻辑相同) 没有脚本就无法实现这一点 如果您的redis版本低于2.6,则只能使用以下代码(简单php版本):
如果您使用的是Redis2.6+,那么可以编写LUA存储过程来获取数据(与php逻辑相同) 嗯。我正在使用
luarestyredis
和nginx
进行这些数据库调用。这看起来很简单,我明天试试。我的“项目”列表可能太长,hGetAll无法达到最佳效果。也许我会为每个LRANGE结果运行一个HGET,不过,这需要大量的数据库调用。这只是一个简单的示例。如果散列有许多键,那么可以使用HMGET只获取LRANGE查询中存在的键。只有2个数据库调用。编辑我的答案以显示此方式。确定。我正在使用luarestyredis
和nginx
进行这些数据库调用。这看起来很简单,我明天试试。我的“项目”列表可能太长,hGetAll无法达到最佳效果。也许我会为每个LRANGE结果运行一个HGET,不过,这需要大量的数据库调用。这只是一个简单的示例。如果散列有许多键,那么可以使用HMGET只获取LRANGE查询中存在的键。只有2个数据库调用。编辑我的答案以显示此方式。
$data = $redis->lRange('itemList:0', 0, 5);
$valueKeys = array_map(
function($key) {
return 'item:' . $key;
}
, array_unique($data)
);
$values = $redis->hMGet('items', $valueKeys);
$ret = [];
foreach ($data as $key) {
$ret[$key] = $values['item:' . $key];
}