如何按键中的值对redis哈希进行排序

时间:2015-07-07 11:00:34

标签: sorting hash redis

在redis中有一个很好的方法来获取按值排序的哈希中的键吗?我查看了文档,但没有找到一种简单的方法。

还有人可以解释一下如何在redis中实现排序,以及this documentation试图说什么?

我有一个非常简单的哈希结构,如下所示:

“薪水” - “employee_1” - “salary_amount”

我很欣赏详细解释。

2 个答案:

答案 0 :(得分:7)

您可以通过一个HASH字段对SET进行排序来实现它。因此,您应该创建所有哈希值的索引SET,并使用BY选项。 此外,您可以使用DESC选项将结果从高到低排序。

e.g。

localhost:6379> sadd indices h1 h2 h3 h4
(integer) 4
localhost:6379> hset h1 score 3
(integer) 1
localhost:6379> hset h2 score 2
(integer) 1
localhost:6379> hset h3 score 5
(integer) 1
localhost:6379> hset h4 score 1
(integer) 1
localhost:6379> sort indices by *->score
1) "h4"
2) "h2"
3) "h1"
4) "h3"
localhost:6379> sort indices by *->score desc
1) "h3"
2) "h1"
3) "h2"
4) "h4"

答案 1 :(得分:5)

来自SORT的文档页面:

  

返回或存储列表中包含的元素,按键设置或排序

因此,您无法真正使用它来按字段数据结构中的值对字段进行排序。为了实现您的目标,您应该在获取Hash的内容之后在应用程序的代码中进行排序,或者为此目的使用Redis嵌入的Lua脚本。

编辑:在与@OfirLuzon交谈后,我们意识到还有另一种,甚至可能更好的方法,就是为此目的使用更合适的数据结构。您应该考虑使用排序集,而不是将薪水存储在哈希值中,其中每个成员都是员工ID,分数是相关薪水。这将为您提供"免费"的订购,范围和分页。 :)

相关问题