提醒的话是推送给负责人的,告诉他哪些用户的订单超时了。不是推给用户。之前想用轮询做但是被boss驳回了
定时器和长连接是不冲突,可以一起用的。 我们有类似的业务,用的是workerman的web-msg-sender,直接调用curl就推送过去了,贼简单。 用crontab 运行php脚本,每分钟跑一次数据库,超时的直接curl调用 web-msg-sender推过去
这样的话数据库不会炸掉吗,我们数据库十万多条订单信息。。只需要拿到数据的话是不是写个定时器定时查询就可以了呢
1分钟查一次数据库怎么会炸,而且超时订单肯定都是有索引的,查一次就炸了谁还用数据库
参考思路: 首先定时器和长连接确实没什么直接的关系,根据你描述的场景,至少有两个关注点: 1、提醒是发给负责人的,那么也没有维持长连接的必要,虽说负责人可能数量不多,毕竟占着长连接资源也是对资源的消耗,执行调度时直接发给负责人即可,不过这也得看你们具体通知方式。 2、数据量比较大,定时轮询数据库性能肯定低下, 可以考虑使用redis的 zset 来搞, 比如score用订单的时间来权重,时间由近及远扫描,这样可以保证每个订单只需扫描一次,也可以避免反复轮询数据库【另外还可以扩展思路,比如配合多进程,并行的处理多个切分的 zset】。
定时器和长连接是不冲突,可以一起用的。
我们有类似的业务,用的是workerman的web-msg-sender,直接调用curl就推送过去了,贼简单。
用crontab 运行php脚本,每分钟跑一次数据库,超时的直接curl调用 web-msg-sender推过去
这样的话数据库不会炸掉吗,我们数据库十万多条订单信息。。只需要拿到数据的话是不是写个定时器定时查询就可以了呢
1分钟查一次数据库怎么会炸,而且超时订单肯定都是有索引的,查一次就炸了谁还用数据库
参考思路:
首先定时器和长连接确实没什么直接的关系,根据你描述的场景,至少有两个关注点:
1、提醒是发给负责人的,那么也没有维持长连接的必要,虽说负责人可能数量不多,毕竟占着长连接资源也是对资源的消耗,执行调度时直接发给负责人即可,不过这也得看你们具体通知方式。
2、数据量比较大,定时轮询数据库性能肯定低下, 可以考虑使用redis的 zset 来搞, 比如score用订单的时间来权重,时间由近及远扫描,这样可以保证每个订单只需扫描一次,也可以避免反复轮询数据库【另外还可以扩展思路,比如配合多进程,并行的处理多个切分的 zset】。