redis排行榜之日排行周排行设计

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Tair(兼容Redis),内存型 2GB
简介: redis排行榜之日排行周排行设计

排行榜功能是一个很普遍的需求。使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择。

一般排行榜都是有实效性的,比如“用户积分榜”。如果没有实效性一直按照总榜来排,可能榜首总是几个老用户,对于新用户来说,那真是太令人沮丧了。

首先,来个“今日积分榜”吧,排序规则是今日用户新增积分从多到少。

那么用户增加积分时,都操作一下记录当天积分增加的有序集合。 假设今天是 2015 年 04 月 01 日,UID 为 1 的用户因为某个操作,增加了 5 个积分。 Redis 命令如下:

bashZINCRBY rank:20150401 5 1

假设还有其他几个用户也增加了积分:

bash

image.gif

    1. ZINCRBY rank:20150401 1 2
    2. ZINCRBY rank:20150401 10 3

    看看现在有序集合 rank:20150401 中的数据(withscores 参数可以附带获取元素的 score):

    bashZRANGE rank:20150401 0 -1 withscores
    bash

    image.gif

      1. 1)"2"
      2. 2)"1"
      3. 3)"1"
      4. 4)"5"
      5. 5)"3"
      6. 6)"10"

      按照分数从高到低,获取 top10:

      bashZREVRANGE rank:20150401 0 9 withscores
      bash

      image.gif

        1. 1)"3"
        2. 2)"10"
        3. 3)"1"
        4. 4)"5"
        5. 5)"2"
        6. 6)"1"

        因为只有三个元素,所以就查询出了这些数据。

        如果每天记录当天的积分排行榜,那么其他花样百出的榜单也就简单了。 比如“昨日积分榜”:

        bashZREVRANGE rank:20150331 0 9 withscores

        利用并集实现多天的积分总和,实现“上周积分榜”:

        bashZUNIONSTORE rank:last_week 7 rank:20150323 rank:20150324 rank:20150325 rank:20150326 rank:20150327 rank:20150328 rank:20150329 WEIGHTS 1 1 1 1 1 1 1

        这样就将 7 天的积分记录合并到有序集合 rank:last_week 中了。权重因子 WEIGHTS 如果不给,默认就是 1。为了不隐藏细节,特意写出。 那么查询上周积分榜 Top10 的信息就是:

        bashZREVRANGE rank:last_week 0 9 withscores

        “月度榜”、“季度榜”、“年度榜”等等就以此类推。

        相关实践学习
        基于Redis实现在线游戏积分排行榜
        本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
        云数据库 Redis 版使用教程
        云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
        相关文章
        |
        7月前
        |
        前端开发
        电影排行案例
        电影排行案例
        61 0
        |
        7月前
        |
        NoSQL Java Redis
        使用Redis实例搭建网上商城的商品相关性分析程序
        本教程将指导您如何快速创建实例并搭建网上商城的商品相关性分析程序。(ApsaraDB for Redis)是兼容开源Redis协议标准的数据库服务,基于双机热备架构及集群架构,可满足高吞吐、低延迟及弹性变配等业务需求。
        17590 0
        |
        存储 NoSQL 算法
        Redis-用户关注、附近商户、用户签到、UV统计
        好友关注 关注和取消关注 针对用户的操作:可以对用户进行关注和取消关注功能。 实现思路: 需求:基于该表数据结构,实现两个接口: 关注和取关接口 判断是否关注的接口 关注是User之间的关系,是博主与粉丝的关系,数据库中有一张tb_follow表来标示: 注意: 这里需要把主键修改为自增长,简化开发。 FollowController //关注 @PutMapping("/{id}/{isFollow}") public Result follow(@PathVariable("id") Long followUserId, @PathVariable("isFollow"
        100 1
        |
        21天前
        |
        存储 NoSQL 算法
        阿里面试:亿级 redis 排行榜,如何设计?
        本文由40岁老架构师尼恩撰写,针对近期读者在一线互联网企业面试中遇到的高频面试题进行系统化梳理,如使用ZSET排序统计、亿级用户排行榜设计等。文章详细介绍了Redis的四大统计(基数统计、二值统计、排序统计、聚合统计)原理和应用场景,重点讲解了Redis有序集合(Sorted Set)的使用方法和命令,以及如何设计社交点赞系统和游戏玩家排行榜。此外,还探讨了超高并发下Redis热key分治原理、亿级用户排行榜的范围分片设计、Redis Cluster集群持久化方式等内容。文章最后提供了大量面试真题和解决方案,帮助读者提升技术实力,顺利通过面试。
        |
        6月前
        |
        存储 NoSQL 算法
        Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
        Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
        44 0
        |
        7月前
        |
        存储 监控 NoSQL
        |
        7月前
        |
        数据可视化
        实时榜单排行计算
        实时榜单排行计算
        169 0
        实时榜单排行计算
        |
        弹性计算 NoSQL Redis
        基于Redis实现在线游戏积分排行榜
        本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
        |
        数据库
        世界排行榜无数据问题的解决方法
        嗨!大家好,我是小蚂蚁。 如果你之前有购买过我的《如何实现世界排行榜功能》的教程,并且根据教程在自己的游戏中实现了世界排行榜的功能。那你应该遇到了这样的问题:12 月份之后,打开世界排行榜,排行榜里没有任何数据。如果你还没发现的话,那就赶紧打开自己的游戏看一下。 之所以出现这个问题,是因为我在编写查询排行榜的云函数时考虑不周,没有考虑到跨年的情况,所以在此表示歉意。 问题的具体原因出在这里:
        124 0