7 回答
![?](http://img1.sycdn.imooc.com/545863cd0001b72a02200220-100-100.jpg)
TA贡献1804条经验 获得超3个赞
你如果用定时器就搜一个定时任务的库,然后当个服务专门用来跑这个东西。
1.数据库单独出来,同步主要的数据库。然后定时查询,定时修改,再同步回去。这个同步可以直接改主数据库。
2.可以使用异步消息模式,每当有新的购买记录的时候就通知另外一个服务启动,将用户的数据更新一次,这个可以使用rabbitmq之类的
3.可以使用数据库的触发器,每当有新的记录产生的时候就执行一次sql语句,里面就有更新判断等
以上随便都可以实现
![?](http://img1.sycdn.imooc.com/5333a0350001692e02200220-100-100.jpg)
TA贡献2012条经验 获得超12个赞
你这个“之前购买过2次”是指活动前么,还是活动进行时也是有效的(因为如果是限定活动之前,也就没有同步的必要了),如果活动时也是可以叠加这两次, 那:
所以现在我们想这样做,就是直接弄个定时器,定时一天4次更新一次用户购买记录表的数据到一张表匹配出按用户分组来查看购买成功的次数,从而每次都从这张购买成功的表里面查就可以了。
你这个设计,一个更新4次,如果数据还没更新过来,用户就下单了,这时候购买成功这张表里数据还没同步过来,怎么办?这个活动是不是就出问题了。
可以在活动要开始的时候,暂时锁表,初始化一张临时表,记录用户购买成功的次数;然后只需要查询这张表中的数据来判断是否符合要求;购买成功顺便更新这张表。进一步提升性能,可以存储在redis中,直接捞redis,没有时查这个表。有点类似一个排行榜。
![?](http://img1.sycdn.imooc.com/533e4c3300019caf02000200-100-100.jpg)
TA贡献1921条经验 获得超9个赞
在用户表(或者别的表)增加字段:billing_count,记录购买次数(方便以后有别的活动,可以再增加个“总消费金额”字段)。 每成功购买一次,该值就+1。
活动的时候,就判断这个值就可以了。
- 7 回答
- 0 关注
- 1426 浏览
添加回答
举报