redis 如何实现用户前七天金币统计?

如何实现用户前七天金币统计

场景:

例如:小明每天使用APP观看了视频后就会获得30金币,或者阅读文章后获得40金币。
现在想统计小明前七天金币总数。

思路

我的想法是使用redis的hash来进行统计。
首先,在用户获取金币的代码位置
第一天:HINCRBY("stat_20190626", 用户ID, 金币数)
第二天:HINCRBY("stat_20190627", 用户ID, 金币数)
第三天,...
在APP使用的接口位置,进行循环统计这7天的某一个用户的金币总数。

这种实现方式需要APP每次调用接口,接口都需要循环七次统计出前七天用户总金币数。总感觉不太好。并且前七天每天每个用户都会存进hash里面,如果有100万用户当天阅读获得金币,那么当天这个key就会有一百万条数据。

希望能够有一个高效统计前七天用户总金币数的方法!谢谢大家!

阅读 2.2k
3 个回答

单独整个接口呗,然后用redis 的lua 脚本,返回累加数据就好了。

新手上路,请多包涵

献上我的思路, 不一定完善, 望有可借鉴的地方

我的思路:
首先也是考虑用redis的hash处理

1.用户获取金币的地方
hash的存储形式为
HINCRBY(用户id,日期, 金币数) (因为是统计某位用户的金币数, 如果是日期为name的话, 如果用户登录不是连续的, 统计结果可能不正确)

  1. 输出用户前几天金币总数
    查询uid的所有数据, 前7天的金币数相加
    (或者可以使用 lua脚本 将金币数相加)

多加一个以用户id为key的hash
新金币数 = HINCRBY(日期, 用户ID, 金币数)
HINCRBY(用户ID, 日期, 新金币数)
foreach(7天){
用户金币总数 += HGET(用户ID, 日期)
}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏