我有一个存储在哈希中的预订 HSET 预订 booking_id "1",booking_info .. ..
并有一个 zset,时间戳作为分数,值作为 booking_id 这些是预订创建日期 例如 zet create_date 我还有 4 种类型的集合,它们的状态根据预订设置,值为 booking_ids 例如 预订:待定值 booking_ids bookings:确认值 booking_ids 最后一个与包含预订的 zet 相同 zset deadline_date of the booking.
所以现在我需要显示已确认且创建日期范围从日期 1 到日期 2 以及截止日期从日期 1 到日期 2 的预订 谢谢
最佳答案
对我来说,有几个可能的选项可以解决这个问题,具体取决于您希望(或不)将多少处理推迟到 Redis。您的基本步骤是:
确定创建日期在所需范围内的预订 ID。问题上的标签表明您正在使用
phpredis
,因此您可以使用zRangeByScore
获取此信息。执行相同操作以识别截止日期在所需范围内的 ID。
确定已确认的预订 ID。根据您的问题描述,这已经作为一个集合存储在Redis中。
现在的任务是识别存在于所有三个集合中的预订 ID。您可以:
- 从 Redis 中提取预订 ID 并确定 PHP 中的通用 ID。
zRangeByScore
应该已经检索到代表预订 ID 的数组,这些预订 ID 在创建日期和截止日期的适当范围内,sMembers
可以为您提供一个包含所有预订 ID 的数组确认集。 - 或者,您可以使用
sAdd
将zRangeByScore
的结果检索到的所有预订 ID 作为一个集合推送回 Redis。然后,您可以让 Redis 为您提供此集合与使用sInter
确认的预订集之间的交集,它应该返回一组满足所有这些条件的预订 ID。如果您走这条路,您可能需要记住删除您创建的用于保存满足创建日期和截止日期条件的所有 ID 的集合。
无论哪种方式,一旦您获得所有 ID,您就可以使用 hGet
检索与每个 ID 关联的预订信息。
关于redis - 使用 net 和 set 维护 redis 中的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27804908/