redis hash – 按date排列前5个按键

我已经将我的数据存储在redis哈希像这样:

client> hmset date:20150513 user 21 m 20 f 1 client> hmset date:20150514 user 17 m 10 f 7 client> hmset date:20150515 user 13 m 3 f 10 client> hmset date:20150516 user 15 m 10 f 5 client> hmset date:20150517 user 15 m 10 f 5 client> hmset date:20150518 user 7 m 3 f 4 client> hmset date:20150519 user 10 m 7 f 3 

这是用户总结(包括男性,女性分叉)。 现在我想按降序顺序按date排列前5个按键。 在上面的情况下,我想要

date:20150519,date:20150518,date:20150517,date:20150516,date:20150515。

如何编写脚本(luascript)或命令来检索数据?

最好的办法是把你的date存储在一个sorting集合中,其分数就是date。 你的例子的数据将需要像这样的东西:

 client> ZADD dates 20150515 20150515 20150516 20150516 20150517 20150517 20150518 20150518 20150519 20150519 

现在你可以很容易地获得前5名的条目:

 client> ZREVRANGEBYSCORE dates +inf -inf LIMIT 0 5 

并按照每个答复HMGET 。 您也可以使用SORT实际获取数据,全部在一个命令,即

 client> SORT dates GET date:*->user GET date:*->m GET date:*->f LIMIT 0 5 DESC 

最后,这对Lua来说当然是非常可行的,但是除非你需要解决额外的需求,否则脚本可能是一个矫枉过正的问题。