redis - 使用 net 和 set 维护 redis 中的顺序

标签 redis phpredis

我有一个存储在哈希中的预订 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 的数组确认集。
  • 或者,您可以使用 sAddzRangeByScore 的结果检索到的所有预订 ID 作为一个集合推送回 Redis。然后,您可以让 Redis 为您提供此集合与使用 sInter 确认的预订集之间的交集,它应该返回一组满足所有这些条件的预订 ID。如果您走这条路,您可能需要记住删除您创建的用于保存满足创建日期和截止日期条件的所有 ID 的集合。

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

关于redis - 使用 net 和 set 维护 redis 中的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27804908/

相关文章:

azure - 如何为 CacheManager 选择 Azure 中的 Redis databaseId?

phpredis:运行脚本调用未定义函数 new Redis() 时出错

phpredis Redis集群连接对象跨请求重用

indexing - 使用 Redis 和 Sinatra 为 Facebook 应用程序建立地理空间索引

node.js - 如何检测订阅者是否离开 Redis PUB/SUB channel ?

python - 如何让scrapy使用两个队列来管理url?

PHP Redis 无效的数据库索引

redis - 为单个域中的多个站点管理 Redis

雷迪斯 |复制和公共(public)磁盘存储

java - Spring boot Redis @Cacheable 方法没有被另一个类调用