【问题标题】:How to sort a hash in redis by its value如何按其值对redis中的哈希进行排序
【发布时间】:2017-09-25 17:55:44
【问题描述】:

我是这个 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 中按排序顺序获取值。如何实现它。?我尝试通过 object_*->object 命令对 key_value 进行排序,如下所示。但它不会起作用。帮帮我。

【问题讨论】:

    标签: javascript node.js sorting redis node-redis


    【解决方案1】:

    回答您的问题 - Redis 没有提供一种方法来检索按值排序的 Hash 的内容。如果 Hash 很小,您可以做的是完整地获取它,然后在应用程序 (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"
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        • 2011-03-10
        • 1970-01-01
        • 2020-02-07
        • 2011-02-02
        相关资源
        最近更新 更多