Redis Sorted Set ...将数据存储在“成员”中?

时间:2013-12-03 20:40:13

标签: redis

我正在学习Redis并使用现有应用程序(例如转换它的部分)进行练习。

我真的很难理解第一个 IF 然后(如果适用) HOW 在一个特定的用例中使用Redis ...如果这是超级的话,请道歉基本的,但我很新,我甚至不确定我是否正确地问:/

情境:

服务器接收

Images,并将time_takenresolution等信息保存在数据库条目中。然后将图像与一个Event相关联(例如“belongs_to”)......所有这些都非常直接用于RDBS。

我想使用Redis维护每个事件最近上传的50个图像对象的列表,以便在请求时传递给客户端。我认为Sorted Set可能是合适的,但这是我的担忧:

首先,我不确定是否可以/应该以这种关联方式使用排序集?它可以引用Redis中的其他对象吗?或者是否有更好的方法来完成这项工作?

其次,我需要能力来删除大于X分钟的元素。我知道密钥的EXPIRE命令,但我不能使用它,因为并非所有图像都需要以相同的周期等到期。

这第二部分看起来更像是对字段的查询,这让我觉得Redis无法使用......但后来我读到我可以使用Sorted Set score来存储时间戳并以这种方式找到“早于X”。

有人能否澄清这两个问题?非常感谢你!

更新

知道我需要为每个图像存储的数据量很小并且会传递到客户端的浏览器,将它存储在有序集的member“字段”中会有什么问题吗?

  • 例如Sorted Set =&gt; event:14:pictures <time_taken> "{id:3,url:/images/3.png,lat:22.8573}"

这可以保存我需要的数据并为给定事件创建可快速更新的最后X张图片列表,并且能够在需要时识别大于X分钟的图片...

1 个答案:

答案 0 :(得分:1)

  

首先,我不确定是否可以/应该使用分类集   联想方式?它可以引用Redis中的其他对象吗?

为什么需要引用其他对象?一个事件可能包含n个图像对象,每个图像对象都有一个time_taken和图像数据;一个排序的集合是完美的。 image_id是关键,得分是time_taken,成员是json / xml的图像数据,无论如何;你很高兴去那里。

  

其次,我需要能够删除大于的元素   X分钟

如果要删除大于X分钟的元素,请使用ZREMRANGEBYSCORE

ZREMRANGEBYSCORE event:14:pictures -inf (currentTime - X minutes)

-inf只是another说明最老的成员而不知道最老的成员时间,但是对于顶级范围,您需要在使用此命令之前根据当前时间计算它(以上是只是一个例子)