redis hash - 按日期排序前5个键

时间:2015-05-19 13:13:49

标签: node.js redis

我已将数据存储在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

这是日期用户摘要(包括男性,女性分叉)。现在我想按降序排序按日期排序前5个键。在上面的例子中,我想要

  

日期:20150519,日期:20150518,日期:20150517,日期:20150516和日期:20150515。

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

1 个答案:

答案 0 :(得分:2)

解决此问题的最佳方法是将日期存储在分数集中,其分数为日期。您的示例数据需要以下内容:

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来说当然是非常可行的,但除非你需要解决其他要求,否则脚本在这里可能是一种过度杀伤。

相关问题