任务开始时间这些状态是如何修改的?
现在遇到过很多时间段任务(秒杀或拼团)的设计,然后这些任务都会存在状态:待开始,进行中,已结束
刚创建的时候是待开始的状态,然后要判断活动开始时间是否到了,如果时间符合就要将状态改为进行中。结束时间也是这样。
我自己想到的方法是:
- 后台定时任务扫一遍(可能存在不及时的情况)
- 查询任务的时候根据任务开始时间和结束时间动态生成状态(数据表会存在没有状态的情况)
还有什么优雅的做法吗?
不太理解你的意思, 任务这种东西你刚创建的时候 就是 待开始 状态. 有操作按钮手动 将任务置为 进行中 或者 结束
@ouer1994 这些比如拼团活动或秒杀活动,创建的时候可能是下周的时间开始秒杀,然后这个状态就要从待开始转进行中。手动应该不大可能。
应该有一个设置一个开始的时间,然后根据当前时间动态返回状态。
2就是正确的做法,为什么会存在没有状态
伪代码
这样不就行了
不需要数据库有状态, 每次手动查询返回一个
status
属性。性能会不会不好? 问这个就是白眼。
数据库设置status字段,标示当前商品的状态. 在商品进行时间范围内异步事件处理,修改数据status为进行中. 定时脚本查询将已结结束的商品状态修改为结束.
个人觉得这种还是应该直接通过开始时间 和 结束时间等来判断活动的具体状态;
如果是通过特定的状态字段来表示活动的状态,那么对该字段的维护则会变得较为复杂,且不可靠性(可能会出现不及时、失败等情况)
我闲着无聊来的,没仔细看,我觉得可以用 Redis + mysql 做呀。 判断订单状态开始可以用 cron 每分钟扫当前时间是否开始(取每次离现在最近的某个活动的开始时间,不要取所有的),活动开始了,页面肯定有人点抢购,抢购成功 Redis 设置哈希 或 key value 等形式的结果 NUM = NUM + 1,设置100个卖光了后者抢光了, REDIS里面那个值 NUM == 100,再执行SQL 修改订单状态为已结束,顺便把结束时间设置比当前时间小。PS:没仔细看题目,我闲着无聊瞎几把乱说的。。。