PHP + Redis实现订单超时
PHP + Redis实现订单超时 针对秒杀场景下的订单超时未支付自动取消,这是一个典型需求。由于秒杀需要快速释放被占用的库存,所以超时机制的设计非常关键。 一、核心思路 订单创建时:记录超时时间(如 30 分钟),将订单 ID 推入 Redis 的 Sorted Set(有序集合),score 为超时时间戳。 定时轮询:启动一个 PHP 常驻进程,每隔 1-2 秒轮询 Sorted Set,取出已超时的订单 ID。 超时处理:更新 MySQL 订单状态为“已取消”,并恢复 Redis 中的秒杀库存(如果业务要求释放库存)。 无需额外组件:纯 Redis + PHP,不依赖 RabbitMQ 的延迟队列或 RocketMQ。 二、详细设计 1. 订单表增加字段 ALTER TABLE orders ADD COLUMN status TINYINT DEFAULT 0 COMMENT '0-待支付 1-已支付 2-已取消 3-已超时'; ALTER TABLE orders ADD COLUMN expire_time DATETIME COMMENT '订单超时时间'; 2. 创建订单时:加入超时监控 在秒杀成功、订单写入 MySQL 后(或写入 Redis 队列时),同时将订单 ID 加入 Redis Sorted Set:...