关于状态的一点总结

每次有活动的需求,都会离不开用户的状态,比如用户今日已登录,已抽奖,已提现。
这些状态的变更,归根结底,也就需要一个事件event
这个事件,可以是用户的触发(手动点击按钮或者用户触发的二级事件,如mq消息),也可以是时间的触发(轮询作业,这种其实也是一个事件,时间点触发的事件)。

存储在数据库的状态,一定需要上述的一个事件去更新,但是展示给用户的看的状态,却不一定。
比如用户金额的提现的活动,用户的金额发放了三天,但是当天的金额只能在当天领取,当天没领取的,隔天会展示已过期的状态,这种无需存储在数据库,然后通过每天0点去轮序更新那些未提现的状态的数据,因为未提现和已过期的状态判断,我们可以在展示给用户的时候做一层时间的校验,就可以区分出到底是未提现还是已过期了。

用户的触发这种是最理想的状态更新,不过有个缺点就是用户没有触发,这个状态不会存储到数据库。比如用户获取到的抽奖券有效期是3天,当有效时间小于今天时候,可以展示给用户已过期,不过这个状态在数据库层面没有任何标记!如果想要有标记的,只能通过0点作业的方式去更新,不过不是很推荐这种,在用户数级别很大的时候,一个作业的轮询,可能耗时会好几个小时甚至超过一天,当然可以做成并行的,这个要看轮询的机器hold得出多大的并发量。

时间触发的方式,这种应用的大部分是由于没有用户触发时候才采用的,可能数据源不在你手里能控制,只能定时去爬取对方服务器的数据。

猜你喜欢

转载自blog.csdn.net/jerryJavaCoding/article/details/80159070
今日推荐