Redis:Lua脚本,用于每隔n个元素返回一个排序集
我正试图组合一个lua脚本,从Redis调用(通过EVAL调用),以便每隔n个元素返回一个排序集(n是集合中的秩,而不是分数) 可以用来构建的Lua脚本的在线示例很少,有人能给我指出正确的方向吗Redis:Lua脚本,用于每隔n个元素返回一个排序集,lua,redis,Lua,Redis,我正试图组合一个lua脚本,从Redis调用(通过EVAL调用),以便每隔n个元素返回一个排序集(n是集合中的秩,而不是分数) 可以用来构建的Lua脚本的在线示例很少,有人能给我指出正确的方向吗 local function copyNOtherElements(table, interval, startpos) local elemno = 1 local rettab = {} for k, v in ipairs(table) do if k >= startpos an
local function copyNOtherElements(table, interval, startpos)
local elemno = 1
local rettab = {}
for k, v in ipairs(table) do
if k >= startpos and (k - startpos) % interval == 0 then
rettab[elemno] = v
elemno = elemno + 1
end
end
return rettab
end
抱歉格式化,在电话上键入。假设该表是一个基于1的数组
抱歉格式化,在电话上键入。假设该表是一个基于1的数组供将来的读者使用,在前面的答案中添加了Redis,并使用了更高效的代码来迭代第n个元素:
local function zrange_pick(zset_key, step, start, stop)
-- The next four lines can be removed along with the start/stop params if not needed as in OP Q.
if start == nil than
start = 0
if end == nil than
end = -1
local set_by_score = redis.call('ZRANGE', zset_key, start, end)
local result = {}
for n = 1, #set_by_score, step do
table.insert(result, set_by_score[n])
end
return result
end
对于未来的读者,请在前面的答案中添加Redis,并使用更高效的代码来迭代第n个元素:
local function zrange_pick(zset_key, step, start, stop)
-- The next four lines can be removed along with the start/stop params if not needed as in OP Q.
if start == nil than
start = 0
if end == nil than
end = -1
local set_by_score = redis.call('ZRANGE', zset_key, start, end)
local result = {}
for n = 1, #set_by_score, step do
table.insert(result, set_by_score[n])
end
return result
end
非常感谢,正在将其插入Redis呼叫,如果我遇到任何Redis特定问题,将向您报告。我觉得不错(这个表确实是一个基于1的数组)。非常感谢您将其插入Redis调用,如果我遇到任何Redis特定的问题,将向您报告。看起来不错(这个表实际上是一个基于1的数组)。