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

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介: 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
        相关文章
        |
        20天前
        |
        NoSQL Java Redis
        使用Redis实例搭建网上商城的商品相关性分析程序
        本教程将指导您如何快速创建实例并搭建网上商城的商品相关性分析程序。(ApsaraDB for Redis)是兼容开源Redis协议标准的数据库服务,基于双机热备架构及集群架构,可满足高吞吐、低延迟及弹性变配等业务需求。
        17532 0
        |
        20天前
        |
        存储 监控 NoSQL
        |
        20天前
        |
        存储 NoSQL 关系型数据库
        Redis 实战篇:巧用数据类型实现亿级数据统计
        Redis 实战篇:巧用数据类型实现亿级数据统计
        92 0
        |
        7月前
        |
        存储
        统计网站的在线人数
        统计网站的在线人数
        48 0
        |
        9月前
        |
        弹性计算 NoSQL Redis
        基于Redis实现在线游戏积分排行榜
        本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
        355 0
        |
        数据库
        世界排行榜无数据问题的解决方法
        嗨!大家好,我是小蚂蚁。 如果你之前有购买过我的《如何实现世界排行榜功能》的教程,并且根据教程在自己的游戏中实现了世界排行榜的功能。那你应该遇到了这样的问题:12 月份之后,打开世界排行榜,排行榜里没有任何数据。如果你还没发现的话,那就赶紧打开自己的游戏看一下。 之所以出现这个问题,是因为我在编写查询排行榜的云函数时考虑不周,没有考虑到跨年的情况,所以在此表示歉意。 问题的具体原因出在这里:
        99 0
        |
        存储 NoSQL JavaScript
        实战!Redis 巧用数据类型实现亿级数据统计!
        实战!Redis 巧用数据类型实现亿级数据统计!
        |
        存储 缓存 NoSQL
        每日一面 - Redis程序设计中,上百万的新闻,如何实时展示最热点的top10条呢
        每日一面 - Redis程序设计中,上百万的新闻,如何实时展示最热点的top10条呢
        每日一面 - Redis程序设计中,上百万的新闻,如何实时展示最热点的top10条呢
        |
        存储 NoSQL Redis
        Redis 实战篇:巧用数据类型实现亿级数据统计 (一)
        在移动应用的业务场景中,我们需要保存这样的信息:一个 key 关联了一个数据集合,同时还要对集合中的数据进行统计排序
        251 0
        Redis 实战篇:巧用数据类型实现亿级数据统计 (一)