gpt4 book ai didi

redis - 如何遍历 Redis 键来获取它们的值?

转载 作者:IT王子 更新时间:2023-10-29 06:13:09 26 4
gpt4 key购买 nike

如何遍历 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 脚本中(请参阅 EVAL ),该脚本接受当前游标并在将所有内容返回给客户端之前获取数据。即:

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"

注意事项:

  1. 这实际上是集群安全的,在这里使用以编程方式生成的键名应该没问题。
  2. 小心 HGETALL w/big hashes。
  3. 不建议对大数据集和/或提供快速响应进行扫描

关于redis - 如何遍历 Redis 键来获取它们的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48812226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com