用net和set维护redis中的顺序

时间:2015-01-06 18:33:28

标签: redis phpredis

我有一个存储在哈希中的预订 HSET预订booking_id“1”,booking_info .. ..

并且zset的时间戳为分数,而值为booking_id,这些是预订创建日期  例如zet create_date 我还有4种类型的套装,其状态根据预订值设置为booking_ids 例如 预订:待定值booking_ids 预订:确认值booking_ids 最后一个与包含预订的zet相同 zset deadline_date预订。

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

1 个答案:

答案 0 :(得分:1)

对我而言,有一些可能的选择可以解决问题,具体取决于您希望延迟到Redis(或不是)的处理量。您的基本步骤是:

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

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

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

现在的任务是确定所有三组中都存在的预订ID。你可以:

  • 从Redis中取出预订ID并确定PHP中的常用ID。 zRangeByScore应该已经检索到代表预订ID的数组,这些数据属于创建日期和截止日期的正确范围,sMembers可以为您提供包含已确认集中所有预订ID的数组。
  • 或者,您可以使用zRangeByScoresAdd结果检索到的所有预订ID作为一组推送回Redis。然后,您可以让Redis为您提供此集合与使用sInter设置的已确认预订之间的交集,该预订应返回满足所有这些条件的预订ID数组。如果你走这条路线,你可能想要记住删除你创建的任何一套,以保存满足创建日期和截止日期条件的所有ID。

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