Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis 将列表与哈希表匹配_Redis - Fatal编程技术网

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];
}