【问题标题】:How would I store this data in redis properly?我将如何正确地将这些数据存储在 redis 中?
【发布时间】:2012-12-01 10:55:53
【问题描述】:

收藏:年

条目 1

{
  _id: ObjectId("4f2fd2ee4516ed6ceebbe17c"),
  shows: [
    {
      day: 1,
      hasVideos: false,
      month: 1,
      showid: 1252187000,
      venue: "Someplace"
    },
    {
      day: 2,
      hasVideos: false,
      month: 2,
      showid: 1252188010,
      venue: "Philly"
    }
  ],
  year: 1988
}

条目 2

{
  _id: ObjectId("4f2fd2ee4516ed6ceebbe17c"),
  shows: [
    {
      day: 19,
      hasVideos: false,
      month: 1,
      showid: 1252187999,
      venue: "Hunt's"
    },
    {
      day: 21,
      hasVideos: false,
      month: 1,
      showid: 1252188030,
      venue: "Hunt's"
    }
  ],
  year: 1987
}

现在,我在我的 redis 存储中创建了一个名为 years 的集合。这是用year:1988 形式的字符串填充的。我创建了一个名为year:1988 的哈希。但这是错误的。我想嵌套这些显示哈希的数组。

如何将哈希嵌套两个集合?我是否应该继续该模式并以1988:01:01 和1988:02:02 的形式创建一个集合来存储第一个条目?

谢谢

【问题讨论】:

  • 您能告诉我们您究竟想如何查询数据吗?看起来您希望能够按年份查询。这可以通过 zset(排序集)来完成。
  • 正如@JonasAdler 所提到的,您想对数据做什么远比数据看起来如何重要,这对于大多数人来说往往是正确的 NoSQL 数据存储。
  • 是的,我想按年份查询。

标签: json mongodb redis schema


【解决方案1】:

如果您只想按日期(或年份)查询,您应该使用排序集作为查找。

Sorted Sets on redis.io

您要做的是使用节目的 ID 或连载节目作为成员,并将节目播出或发生的日期作为得分。。 p>

请注意,如果您只存储节目 ID,则需要执行另一次查找以获取节目的详细信息。

现在您可以执行您想要的范围查询:

ZRANGEBYSCORE

ZREVRANGEBYSCORE

【讨论】:

  • 所以,排序集中的键可能是shows。然后我应该创建名为show:showid 的哈希?谢谢
  • 根本没有散列,你有一个有序的集合,其中包含所有节目 ID 或节目的序列化数据。如果您只使用节目的 ID 作为成员,您可以将节目存储在其 ID showId -> show_data 下,或者如果您想使用哈希:shows -> showId -> show_data
  • 序列化数据意味着一串json?另外,如何创建可搜索的日期字符串?我应该将其转换为纪元时间吗?
  • 你可以用数百万种方式序列化数据,json就是其中之一。是的,您应该将时间转换为 unix 时间。
猜你喜欢
  • 2021-09-30
  • 1970-01-01
  • 2019-09-27
  • 2023-01-24
  • 1970-01-01
  • 2011-11-17
  • 2018-02-21
  • 2021-01-12
  • 2017-12-24
相关资源
最近更新 更多