【问题标题】:Redis Sorted Set ... store data in "member"?Redis Sorted Set ...将数据存储在“成员”中?
【发布时间】:2013-12-03 20:40:12
【问题描述】:

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

我真的很难理解首先 IF 然后(如果适用)如何 在一个特定的用例中使用 Redis ...如果这是超级道歉基本的,但我太新了,我什至不确定我问的是否正确:/

场景:

Images 由服务器接收,time_taken 和 resolution 等信息保存在数据库条目中。然后将图像与一个Event 相关联(例如“belong_to”)......对于 RDBS 来说,这一切都非常简单。

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

首先,我不确定是否可以/应该以这种关联方式使用 Sorted Set?它可以引用 Redis 中的其他对象吗?还是有更好的方法来做到这一点?

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

第二部分似乎更像是对字段的查询,这让我认为 Redis 不能使用……但后来我读到我可以使用 Sorted Set score 来存储时间戳并找到以这种方式“比 X 更老”。

有人可以澄清这两个问题吗?非常感谢!

更新

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

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

这会保存我需要的数据,并为给定事件创建一个可快速更新的最后 X 张图片列表,如果需要,还可以识别超过 X 分钟的图片...

【问题讨论】:

    标签: redis


    【解决方案1】:

    首先,我不确定是否可以/应该在此使用 Sorted Set 联想方式?是否可以引用 Redis 中的其他对象?

    为什么需要引用其他对象?一个事件可能有n 图像对象,每个对象都有一个time_taken 和图像数据;排序集非常适合这个。 image_id是key,score是time_taken,member是json/xml格式的图片数据,随便吧;你很高兴去那里。

    其次,我需要能够删除大于 X 分钟前

    如果要删除超过 X 分钟的元素,请使用 ZREMRANGEBYSCORE:

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

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

    【讨论】:

    • 谢谢——现在学习曲线真的很高,所以在我最初的帖子中,我仍然在考虑相关性。您是否知道成员的长度限制(json/xml 数据)?
    猜你喜欢
    • 2016-03-16
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    相关资源
    最近更新 更多