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

Dee*_*hra 4 sorting hash redis

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

还有人可以解释一下如何在redis中实现排序,以及本文档试图说明的内容?

我有一个非常简单的哈希结构,它是这样的:

"工资" - "employee_1" - "salary_amount"

我很感激详细解释.

Ofi*_*zon 7

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

例如

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"
Run Code Online (Sandbox Code Playgroud)


Ita*_*ber 5

来自SORT的文档页面:

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

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

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