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

How to sort a hash in redis by its value

我是这个redis的新手,所以请帮助我! 我正在使用此命令

在 redis 中存储值
client.hmset('top_trend', array[0], 0);
client.expire('top_trend', 86400, redis.print);

如果我尝试使用此命令再次设置相同的密钥,我将增加值“0”,

if(client.hexists('top_trend', array[0]) == true){
   client.hincrby('top_trend', array[0] , 1, redis.print);
}

这会将我的数据数组存储在 redis 中,例如, 例如:key = "top_trend"

"tamil"
"0"
"english"
"0"
"hindi"
"0"

如果泰米尔语已经可用于键"top_trend",它将像这样递增它的值:

"tamil"
"1"
"english" (//if english is already 3 times available)
"4"

现在我需要对值进行排序: 按降序排列并在节点js中按排序顺序获取值。如何实现它。??我试过 sort key_value by object_*->object 这样的命令。但它不会起作用。帮帮我。

回答您的问题 - Redis 不提供检索按值排序的哈希内容的方法。如果哈希很小,您可以做的是完整获取它,然后在应用程序中对其进行排序 (Node.js)。

另外,仅供参考,您的代码似乎有点多余 - HINCRBY 将初始化该字段,即使它不存在,所以:

127.0.0.1:6379> EXISTS foo
(integer) 0
127.0.0.1:6379> HINCRBY foo bar 1
(integer) 1
127.0.0.1:6379> HGETALL foo
1) "bar"
2) "1"

这意味着除非您有充分的理由初始化并检查是否存在 "manually",否则您可以简单地删除该代码。

如果按某个值排序是您实施所需的一项功能,您可能会考虑使用单独的 Redis 键来执行此操作。通过使用 ZINCRBY 递增分数,您可以轻松地使用 Sorted Sets。此外,通过这种方式,您还可以利用存储值的字典顺序。