我在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
如何获得降序列表?
答案 0 :(得分: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)
请记住,您只能使用它来对表值进行排序,而不是键。但是,当您在不同的上下文中使用密钥时,这应该可以解决您的问题。
答案 1 :(得分:1)
如果我理解你,你可能想要做以下事情:
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
这将从键列表中的倒数第二项开始,然后向上计数。 注意,我没有测试代码,但它应该工作..