创建订单之后锁定库存,如果订单超时未支付,则关闭订单、释放库存。

扫表轮询

扫描mysql订单表,获取超时的订单数据。

懒删除

在查询的时候,如果订单已经超时,则更改数据库。

这种方式仅限于订单超时不需要释放库存的场景。

redis实现

使用一个队列,存储订单id。redis可以设置超时删除时的回调。

缺点是:这种方案对于订单量非常大的情况比较耗费内存。

消息队列实现

下单的时候,发送延迟消息到延迟队列。

消费者一直消费处理订单,如果订单已支付,则直接忽略;如果订单未支付,则关闭订单、释放库存。