V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
brazz
V2EX  ›  Redis

关于排行榜的程序设计

  •  
  •   brazz · 2020-05-12 10:35:59 +08:00 · 5321 次点击
    这是一个创建于 1648 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    后者相同的数据可以把时间序列化成小数来做二维排序。
    brazz
        10
    brazz  
    OP
       2020-05-12 14:32:33 +08:00
    @wysnylc 他这种 今日、本月、上月、累计排行 就是你说的重排了吧,还要按照部门层级来做排名
    wmhx
        11
    wmhx  
       2020-05-12 16:52:16 +08:00
    一种情况一个 group 的 sql, 难么?
    先动手搞起来.
    huanghe314
        12
    huanghe314  
       2020-08-22 02:27:08 +08:00 via iPhone
    这有啥工作量,zset 往里放不就行了,只放每个人的就行,db 维护组织关系。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2539 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:26 · PVG 09:26 · LAX 17:26 · JFK 20:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.