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,如何在Redis中迭代对象并获取其所有值?大概是这样的: scan object* hgetall 这应该会回来 age 22 password 1234 username Sarah age 20 password 5678 username Mike 当Redis包含此数据时: hmset objectSarah age 22 password 1234 username Sarah hmset objectMike age 20 password 5678 username Mike

如何在Redis中迭代对象并获取其所有值?大概是这样的:

scan object* hgetall
这应该会回来

age 22 password 1234 username Sarah
age 20 password 5678 username Mike
当Redis包含此数据时:

hmset objectSarah age 22 password 1234 username Sarah
hmset objectMike age 20 password 5678 username Mike

谢谢

您不可能只用一个命令就可以做到这一点,您需要逐个扫描并处理结果(即,
HGETALL
它们)

但是,您可以将其包装成一个Lua脚本(请参阅),该脚本接受当前游标并在将所有内容返回到客户端之前获取数据。即:

local cur, pat = tonumber(ARGV[1]), ARGV[2]
local scan = redis.call('SCAN', cur, 'MATCH', pat)

for i, v in ipairs(scan[2]) do
  local data = redis.call('HGETALL', v)
  scan[2][i] = { v, data }
end

return scan
运行时示例:

127.0.0.1:6379> hmset objectSarah age 22 password 1234 username Sarah
OK
127.0.0.1:6379> hmset objectMike age 20 password 5678 username Mike
OK
127.0.0.1:6379> script load "..."
"d81ace3345591b4fee7f3bf4cf28e7b260b59554"
127.0.0.1:6379> evalsha d81ace3345591b4fee7f3bf4cf28e7b260b59554 0 0 object*
1) "0"
2) 1) 1) "objectSarah"
      2) 1) "age"
         2) "22"
         3) "password"
         4) "1234"
         5) "username"
         6) "Sarah"
   2) 1) "objectMike"
      2) 1) "age"
         2) "20"
         3) "password"
         4) "5678"
         5) "username"
         6) "Mike"
注:

  • 这实际上是集群安全的,在这里使用编程生成的键名应该可以
  • 小心带有大散列的HGETALL
  • 不建议对大数据集和/或快速响应进行扫描