【问题标题】:Getting the latest set/hash from redis从 redis 获取最新的 set/hash
【发布时间】:2011-10-27 10:07:41
【问题描述】:

我刚刚开始使用 redis,并且在使用 noSql 时遇到了我的第一个绊脚石;以前我只知道 SQL server。

我理解一切都是基于关键价值的原则。但是,这如何与排序一起工作,例如:

使用哈希集:

HMSET users:1 firstname 'james' lastname 'smith' created 'datetime.datatime.now'

现在我假设您添加第二条记录,您将获得哈希集的长度(在这种情况下,我们将说它的 1 返回值x),然后添加另一行:

HMSET users:x firstname 'john' lastname 'smith' created 'datetime.datatime.now'

您如何获得最新记录?按日期?或者您可以直接说“在哈希集的 -1 处获取记录”吗?

当排序集更合适时,我可能会建议使用哈希集?

【问题讨论】:

    标签: python sorting redis hashset


    【解决方案1】:

    您需要检查SORT 命令。

    如果创建时间戳存储在纪元时间,您可以按创建时间戳排序。

    > HMSET users:1 firstname 'john' lastname 'smith' created 1319729878
    "OK"
    > HMSET users:2 firstname 'Jane' lastname 'Forbes' created 1319729910
    "OK"
    > sadd users 1
    true
    > sadd users 2
    true
    > sort users get users:*->firstname by users:*->created
    ["john","Jane"]
    > sort users get users:*->firstname by users:*->created desc
    ["Jane","john"]
    

    您可以根据需要获取多个键,SORT 可能是具有大多数选项的命令,请研究文档。

    关于密钥,您必须仔细考虑可能的密钥重用(删除、计数+1、插入会重用密钥?),所以我只是从我的项目中的关系数据库中获取密钥。

    【讨论】:

    • 限制为 1 的 SORT 是否仍会在 O(N+M*log(M)) 中运行?
    • 我认为是O(N),因为M=1log(1)==0
    【解决方案2】:

    您应该使用一组排序的用户标识,当您添加到该集合时,添加用户标识和时间戳作为分数。

    然后您可以使用 zrevrange 之类的东西以 asc 或 desc 顺序将它们拉出,将其限制为 1 条记录以获取最新的记录。

    然后你可以从你的哈希中获取所有的值。

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 2015-10-15
      • 2017-04-29
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      相关资源
      最近更新 更多