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
Hash 有没有一种方法可以使用HSCAN(绝地武士)检索没有值的密钥?_Hash_Redis_Jedis - Fatal编程技术网

Hash 有没有一种方法可以使用HSCAN(绝地武士)检索没有值的密钥?

Hash 有没有一种方法可以使用HSCAN(绝地武士)检索没有值的密钥?,hash,redis,jedis,Hash,Redis,Jedis,我正在使用redis(与JavaRedis一起使用),我想使用一个散列,在每个键中包含许多键和一些数据(二进制存储) 我希望在不阻塞服务器的情况下,通过映射的键进行迭代;因为有很多进程访问此服务器 因此,我不想使用HKEYS命令。 我想使用HSCAN命令,或者类似的方法。因为我只需要这一步操作中的钥匙 但正如文档所解释的,HSCAN方法返回: -光标 -一对键值的数组 (请参阅和(信息不多,请参阅最后一个链接)) 正如我所说,我只想收到钥匙;不是价值观。但是HSCAN方法同时返回这两个参数,我担

我正在使用redis(与JavaRedis一起使用),我想使用一个散列,在每个键中包含许多键和一些数据(二进制存储) 我希望在不阻塞服务器的情况下,通过映射的键进行迭代;因为有很多进程访问此服务器

因此,我不想使用HKEYS命令。
我想使用HSCAN命令,或者类似的方法。因为我只需要这一步操作中的钥匙

但正如文档所解释的,HSCAN方法返回:
-光标
-一对键值的数组
(请参阅和(信息不多,请参阅最后一个链接))

正如我所说,我只想收到钥匙;不是价值观。但是HSCAN方法同时返回这两个参数,我担心这会影响服务器和应用程序的性能

我一直在搜索文档和论坛,没有找到任何回复。但如果有人知道得更清楚,请告诉我

知道扫描方法能像我所希望的那样工作,我有点不舒服,但我不能。。。。不知道为什么


感谢虽然
HSCAN
确实以散列形式返回字段值对,但您可以通过服务器端Lua脚本转换输出以过滤值(有关详细信息,请参阅)。这将降低网络使用率和客户端负载,但代价是服务器工作(稍微)困难

以下脚本提供了一个可能的实现:

local key = KEYS[1]
local cursor = ARGV[1]
local res = redis.call('HSCAN', key, cursor)
local rep = { res[1], {} }
for i=1, #res[2], 2 do
  table.insert(rep[2], res[2][i])
end
return rep

好的,我不知道lua,但我认为您可以通过使用光标和一组键创建一个新结果来过滤响应。不应该是table.insert(rep[2]、res[2][i][0])或类似的,只包含键?Lua(我认为)很容易阅读,而且您对其中大部分内容理解正确。请注意,res[2]是散列中的交替字段和值的数组。循环从索引1开始(Lua是基于1的),并以步骤2进行迭代。这将导致仅将字段名复制到代表(ly)。顺便说一句-我测试了该代码段,它似乎工作正常;)谢谢,我试试看。再见!