【问题标题】:Redis: Lua script to return every other nth element of a sorted setRedis:Lua 脚本返回排序集的每隔 n 个元素
【发布时间】:2013-04-26 11:28:02
【问题描述】:

我正在尝试组合一个要从 Redis 调用的 lua 脚本(通过 EVAL 调用),以便返回已排序集合中每隔一个第 n 个元素(第 n 个是集合中的排名,而不是分数)。

可用于构建的 Lua 脚本的在线示例很少,有人能指出正确的方向吗?

【问题讨论】:

    标签: lua redis


    【解决方案1】:
    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 的数组

    【讨论】:

    • 非常感谢,正在考虑将其插入 Redis 调用,如果遇到任何 Redis 特定问题,我会报告。对我来说看起来不错(该表确实是一个基于 1 的数组)。
    【解决方案2】:

    对于未来的读者,将 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2014-03-10
      相关资源
      最近更新 更多