创建订单之后锁定库存,如果订单超时未支付,则关闭订单、释放库存。
扫表轮询
扫描mysql订单表,获取超时的订单数据。
懒删除
在查询的时候,如果订单已经超时,则更改数据库。
这种方式仅限于订单超时不需要释放库存的场景。
redis实现
使用一个队列,存储订单id。redis可以设置超时删除时的回调。
缺点是:这种方案对于订单量非常大的情况比较耗费内存。
消息队列实现
下单的时候,发送延迟消息到延迟队列。
消费者一直消费处理订单,如果订单已支付,则直接忽略;如果订单未支付,则关闭订单、释放库存。