0

我有一个预订存储在哈希 HSET bookings booking_id "1",booking_info .. ..

并且有一个带有时间戳的 zset 作为一个分数和一个值作为一个 booking_id 这些是预订创建日期,例如 zet create_date 我还有 4 种类型的集合,它们的状态与作为 booking_ids 的预订集的状态一致,例如 bookings:pending values booking_ids bookings:confirmed values booking_ids,最后一个与zet相同,其中包含预订的zset截止日期。

所以现在我需要显示已确认的预订,并且创建日期范围从日期 1 到日期 2,截止日期从日期 1 到日期 2 谢谢

4

1 回答 1

1

对我来说,有几个可能的选项可以解决这个问题,具体取决于您想要推迟到 Redis 的处理量(或不推迟)。您的基本步骤是:

  • 确定创建日期在所需范围内的预订 ID。问题上的标签表明您正在使用phpredis,因此您可能可以使用zRangeByScore.

  • 执行相同操作以识别截止日期在所需范围内的 ID。

  • 识别已确认的预订 ID。根据您的问题描述,这已经作为一组存储在 Redis 中。

现在的任务是识别所有三个集合中存在的预订 ID。你可以:

  • 从 Redis 中提取预订 ID 并确定 PHP 中的公共 ID。 zRangeByScore应该已经检索到表示在创建日期和截止日期的适当范围内的sMembers预订 ID 的数组,并且可以为您提供一个包含已确认集合中的所有预订 ID 的数组。
  • 或者,您可以zRangeByScore使用sAdd. 然后,您可以让 Redis 为您提供此集合和已确认预订集合之间的交集sInter,它应该返回满足所有这些条件的预订 ID 数组。如果你走这条路,你可能要记住删除你创建的任何集合,以保存满足创建日期和截止日期条件的所有 ID。

无论哪种方式,一旦您获得所有 ID,您就可以使用 检索与每个 ID 关联的预订信息hGet

于 2015-01-06T19:39:02.477 回答