关于排行榜的程序设计

2020-05-12 10:35:59 +08:00
 brazz

我现在需要根据充值表来统计每个公司、部门、小组(级别可能是有 N 级)以及个人(个人还分不同岗位)的今日、本月、上月以及累计充值金额的排行榜功能(排行榜一小时更新一次)。目前打算用 redis 的 zSet 来处理,但是感觉工程量巨大(可能是因为我思路错了),所以请教下如何设计比较好?

5327 次点击
所在节点    Redis
12 条回复
wysnylc
2020-05-12 10:45:53 +08:00
我天天做这玩意,给你个提示 相同积分数据重排用两个 zset
xcstream
2020-05-12 10:53:37 +08:00
一小时更新一次 sql 查一下就可以了
xiaowangge
2020-05-12 11:09:01 +08:00
内部系统的话,SQL 就够用了
brazz
2020-05-12 11:11:09 +08:00
@wysnylc 就感觉代码写起来很麻烦,要维护 redis 的数据
DDounx
2020-05-12 11:15:22 +08:00
SQL 好一点,内部的话
brazz
2020-05-12 11:21:23 +08:00
@DDounx sql 是代码简单,但是数据量比较大,会有瓶颈
wysnylc
2020-05-12 11:55:37 +08:00
@brazz #4 并不,如果不做重排 几行代码搞定
做重排就很麻烦,批量查询以及重排都要写
ljzxloaf
2020-05-12 14:07:21 +08:00
SQL,如果不能直接访问 db 的话,收消息累加计数,注意持久化数据,redis 一般不作为高可用存储,只做缓存之用
forrestchang
2020-05-12 14:11:22 +08:00
非实时的 SQL 比较好,实时的可以选择 Redis + ZSET 。

后者相同的数据可以把时间序列化成小数来做二维排序。
brazz
2020-05-12 14:32:33 +08:00
@wysnylc 他这种 今日、本月、上月、累计排行 就是你说的重排了吧,还要按照部门层级来做排名
wmhx
2020-05-12 16:52:16 +08:00
一种情况一个 group 的 sql, 难么?
先动手搞起来.
huanghe314
2020-08-22 02:27:08 +08:00
这有啥工作量,zset 往里放不就行了,只放每个人的就行,db 维护组织关系。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/670830

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX