在redis中有一个很好的方法来获取按值排序的哈希中的键吗?我查看了文档,但没有找到一种简单的方法。
还有人可以解释一下如何在redis中实现排序,以及this documentation试图说什么?
我有一个非常简单的哈希结构,如下所示:
“薪水” - “employee_1” - “salary_amount”
我很欣赏详细解释。
答案 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,分数是相关薪水。这将为您提供"免费"的订购,范围和分页。 :)