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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
简介: 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
        相关文章
        |
        6月前
        |
        存储 NoSQL 算法
        Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
        Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
        50 0
        |
        3月前
        |
        存储 前端开发 NoSQL
        如何优雅地实现在线人数统计功能:技术干货分享
        在现代Web开发中,实时在线人数统计是一个常见且重要的功能,它不仅提升了用户体验,还能为网站运营者提供宝贵的数据支持。今天,我们将深入探讨如何优雅地实现这一功能,结合前端展示、后端处理及数据存储等多个方面,为您呈现一套完整的技术解决方案。
        399 5
        |
        7月前
        |
        存储 监控 NoSQL
        |
        7月前
        |
        数据可视化
        实时榜单排行计算
        实时榜单排行计算
        174 0
        实时榜单排行计算
        |
        消息中间件 NoSQL 搜索推荐
        生产:实时排序-topN排行榜
        生产:实时排序-topN排行榜
        |
        弹性计算 NoSQL Redis
        基于Redis实现在线游戏积分排行榜
        本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
        |
        数据挖掘
        白话Elasticsearch38-深入聚合数据分析之案例实战 下钻分析之统计每季度每个品牌的销售额
        白话Elasticsearch38-深入聚合数据分析之案例实战 下钻分析之统计每季度每个品牌的销售额
        127 0
        如何实现世界排行榜功能
        这应该是唯一的一篇如何在微信小游戏制作工具中实现世界排行榜功能的教程,超万字的图文教程,内容非常的详尽,能够帮助你在游戏中实现世界排行榜功能。这是一篇付费教程,但是能够帮助你节省很多很多的时间。所有的小蚂蚁的学员可以在知识拓展库中免费阅读这篇教程。
        125 0
        |
        存储 缓存 NoSQL
        每日一面 - Redis程序设计中,上百万的新闻,如何实时展示最热点的top10条呢
        每日一面 - Redis程序设计中,上百万的新闻,如何实时展示最热点的top10条呢
        每日一面 - Redis程序设计中,上百万的新闻,如何实时展示最热点的top10条呢
        |
        NoSQL 算法 Redis
        REDIS05_HyperLogLog的概述、基本命令、UV、PV、DAU、MAU、首页UV如何进行统计处理
        REDIS05_HyperLogLog的概述、基本命令、UV、PV、DAU、MAU、首页UV如何进行统计处理
        515 0
        REDIS05_HyperLogLog的概述、基本命令、UV、PV、DAU、MAU、首页UV如何进行统计处理