从Redis获取最新的集合/哈希

6

我刚开始接触Redis,对于使用NoSQL遇到了第一个难关;之前我只使用过SQL Server。

我理解一切都是基于键和值的原则。但是,在排序方面,它是如何工作的呢?例如:

使用哈希集:

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

现在假设你要添加第二条记录,你需要获取哈希集合的长度(在这种情况下,我们将其称为返回到值x的1),然后添加另一行:

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

您想获取最新的记录吗?通过日期获取还是可以直接说“从哈希集合中获取-1的记录”?

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

2个回答

4

您需要查看SORT命令。

如果创建时间存储在epoch时间中,您可以按创建时间排序。

> 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、插入是否会重用密钥?),因此在我的项目中,我只从关系型数据库中获取密钥。


SORT 带有限制为 1,仍然会在 O(N+M*log(M)) 中运行吗? - Donald Miner
我认为它是 O(N),因为 M=1log(1)==0 - Niloct

1

在IT相关的内容中,您应该使用已排序的用户ID集合。当您添加到集合时,请将用户ID和时间戳作为分数一起添加。

然后,您可以使用类似于zrevrange的方法按升序或降序将它们提取出来,将其限制为1个记录以获取最新的记录。

接下来,您可以从哈希表中获取所有值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接