首页 > 求一个需求实现的实现方法,比如,消费每满500元,送一礼物。。。

求一个需求实现的实现方法,比如,消费每满500元,送一礼物。。。

技术php+mysql, 缓存用到redis,用户消费是流水的,在消费记录表里,,但是现在有个需求是,,用户每累积消费500元,送一个礼物(记录在另外一张表),网站用户量比较大。。。。求一个比较好的实现方式,只要讲大致的流程和设计即可,谢谢了!


我觉得直接给用户表加字段不是很好的选择,用户表操作太频繁了。不知道你们的数据库读写分离没,都用上redis了,建个关系表就好了啊
--直接新建一个用户消费关系表,字段包括用户id,今日消费,是否已送礼
crontab个把小时跑一次,达到要求送礼生成礼品订单,更新关系表。这个表每日凌晨可日志后清空。我没做过大系统,但是我觉得你们都分布缓存了,负载应该没多大压力了才是。


把操作拆分:

  1. 给用户表加一个字段,总消费额,每次用户消费把钱加上去,存起来;同时判断是否增加到新的500阶梯(这个很简单,对500整除,判断是否增加1)。

  2. 旧数据可以把整个库弄到本地,慢慢跑出结果。

  3. 看你的评论,似乎要看新增加的这500消费额到底买了什么东西?同理,每次用户消费直接统计,旧数据按照时间戳慢慢跑。


题主用到了 redis ,那我提供一个 redis 的思路吧。

用 sorted set 来存储用户的消费记录:

key 采用用户 id 和语义化的字符串,比如 user:$uid:purchase:logs

score 存储用户消费记录的时间戳。

member 存储用户每次消费的数额。

消费总额也可以记录在 redis 里面,比如 user:$uid:purchase:total

发放礼物次数保存在 user:$uid:purchase:recieved_gifts

做个脚本在服务器不繁忙的时候把消费记录从 MySQL 数据库 migrate 到 redis 。

放在 redis 里,可以对用户的消费记录做实时查询,比直接从数据库里读取要快。

用户每一笔消费的事务结束之后,就可以通过 totalrecieved_gifts 来计算是否满足发放礼物的条件。

暂时先想到这么多,抛块小砖,希望引出更大的玉。

如有疑问,欢迎讨论。

【热门文章】
【热门文章】