首页  >  问答  >  正文

thinkphp5中如何用redis做一个订单15分钟取消?

1.我想用队列检测下单的订单有没有超过15分钟,如果超过15分钟就修改数据库改为超时取消,但是不知道怎么下手

过去多啦不再A梦过去多啦不再A梦2712 天前1666

全部回复(5)我来回复

  • 漂亮男人

    漂亮男人2017-06-06 09:54:43

    可以将这个功能做成用户行为触发,比如用户查看订单时才判断未支付且超过15分钟就更改订单状态为超时取消。未查看的、状态未更新的订单可能写计划任务凌晨更新。在订单量大的情况下,不推荐全部订单都实时同步状态,也没意义。

    回复
    0
  • 怪我咯

    怪我咯2017-06-06 09:54:43

    数据库轮询:使用定时任务轮询数据库,查询出相关订单处理,量不大的情况使用,小项目中这个方法简单实用便于维护

    环形队列:参考:http://mp.weixin.qq.com/s/mvF...

    队列服务:使用延时队列处理 参考:http://tech.youzan.com/queuin...

    回复
    0
  • 高洛峰

    高洛峰2017-06-06 09:54:43

    比较好的解决方案是用时间轮,即楼上所说的环形队列
    用Redis键空间通知也可以实现,设置过期时间为15分钟, 监听键删除事件, 做相应的操作

    回复
    0
  • phpcn_u1582

    phpcn_u15822017-06-06 09:54:43

    用定时器不好么

    回复
    0
  • 滿天的星座

    滿天的星座2017-06-06 09:54:43

    不用redis

    用MySQL即可实现

    方案:
    写个PHP脚本,守护进程执行,
    while循环,查库,下单时间超过15分钟,并且是未支付, 未发货的订单,就执行取消操作

    回复
    0
  • 取消回复