【问题标题】:get key list in descending order in lua scipt在lua脚本中按降序获取键列表
【发布时间】:2016-08-27 00:22:13
【问题描述】:

我在 redis 密钥库中有一个列表。它包含日期作为键名,像这样。

key  
===  
20160429 
20160430 
20160501
20160502

现在我想键入最后两个键,为此我在我的 lua 脚本中执行以下操作。

local data = {};
local keyslist = redis.call('keys', 'stats:day:*');
local key, users, redisData;
-- keyslist = #keyslist.sort(#keyslist, function(a, b) return a[2] > b[2] end);
-- keyslist = #keyslist.sort(#keyslist, function(a,b) if a>b then return true; else return false; end end); 
for iCtr = 1, #keyslist do

    key = string.gsub(keyslist[iCtr], 'stats:day:','');
    redisData = redis.call('hmget', keyslist[iCtr], 'image','video');
    table.insert(data, {date=key, imgctr=redisData[1], vidctr=redisData[2]});
    if iCtr == 2 then break end
end

但这是返回前 2 条记录,我需要最后 2 条记录(例如以下键)

20160501
20160502

如何获取降序键列表?

【问题讨论】:

    标签: lua redis lua-table


    【解决方案1】:

    对 Lua 表进行排序的示例代码:

    keylist = {1,2,5,8,3, 5}
    
    -- after the following line keylist will be sorted ascending (default)
    
    table.sort(keylist)
    
    -- this line is equivalent:
    
    table.sort(keylist, function (a,b) return a < b end)
    

    第二个参数是table。sort是一个函数,它接受两个表值,如果第一个小于第二个则返回true。

    要对表进行排序,您只需调用

    table.sort(keylist, function(a,b)return a > b end)
    

    请记住,您只能使用它来对表值进行排序,而不是它们的键。但是当您在不同的上下文中使用键时,这应该可以解决您的问题。

    【讨论】:

    • 感谢@piglet 回复我。我已经尽力解释我的问题,但由于我的英语很差,可能是我解释得不好,真的很抱歉。
    • @ManishSapkal 我稍微改变了我的答案,我对你使用“key”感到困惑。希望这是现在更好的帮助吗?
    【解决方案2】:

    如果我理解正确,您可能需要执行以下操作:

    local count = 0
    for iCtr = #keyslist-1,#keyslist do
      count=count+1
      --do your stuff
      if count == 2 then break end
      --or
      if iCtr == #keyslist then break end
    end
    

    这将从键列表中的倒数第二项开始,然后向上计数。 注意,我没有测试代码,但它应该可以工作..

    【讨论】:

    • 感谢@felixb,这非常接近我的预期结果。正如我在问题中提到的,我需要 ASC 顺序的最终结果。
    • 我更新了代码,现在它总是采用最后两个元素并按相应的顺序给出它们。希望有所帮助(尚未测试)
    • 谢谢,它的工作几乎没有变化:for iCtr = #keyslist-1,#keyslist do
    • 啊,是的,没错。这总是发生在我身上。我会更新答案。
    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 2021-05-20
    • 2014-08-19
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    相关资源
    最近更新 更多