是否存在将表传递给单个redis.call('HMGET',[key],...)
的任何类似行为,而不是循环遍历表并一个接一个地运行多个redis.call
?
我在Redis中有一个哈希键,代表一个包含100000个条目的Fenwick树。它具有顺序整数索引和浮点值:
127.0.0.1:6379[1]> hmget fenwick 1 2 3 4 ...
1) "0.75865226460558"
2) "1.0234678955857959"
3) "0.057608450324092272"
4) "1.1002286486794375"
...
我正在尝试使用Redis'找到一些随机条目entryid
的总和。内置的Lua解释器。显然,这样做的天真方式是一次一个地对表进行一次访问:
local sum=0
while entryid>0 do
sum=sum+redis.pcall('HGET',KEYS[1],temp)
entryid=entryid-bit.band(entryid,-entryid)
end
我试图生成并加载一个字符串,将所有命令压缩为一个HMGET
并减少往返次数:
local evalstr="return redis.pcall('HMGET',KEYS[1]"
local sum=0
while entryid>0 do
evalstr=evalstr..','..temp
entryid=entryid-bit.band(temp,-temp)
end
local vals=loadstring(evalstr..')')()
for i=1,#vals do
sum=sum+vals[i]
end
然而,无论大小fenwick
是什么,编译的开销都会使这个查询比第一个慢。
基本上,我正在寻找这种行为:
local tbl={}
local c=1
while temp>0 do
tbl[c]=temp
c=c+1
temp=temp-bit.band(temp,-temp)
end
local vals=redis.pcall('HMGET',KEYS[1],tbl)
local sum=0
for i=1,#vals do
sum=sum+vals[i]
end
但显然它不起作用。有没有办法收集我想先在Lua中查询Redis的所有值,然后用一个命令将它们发送给Redis?
答案 0 :(得分:3)