美文网首页
严格排行榜Redis实现

严格排行榜Redis实现

作者: jesse_cheng | 来源:发表于2018-10-11 00:04 被阅读0次

1 常见排行榜

排行榜主要分为两种,一种是并列排行榜(存在相同排名的情况),一种是严格排行榜(分先后顺序,不存在并列名次)。

一般根据不同的业务场景,选用不同的排行榜。例如,对于存在实物奖励且前一名与后一名的奖品差距很大时,往往采用严格排行榜,而对于只是激励用户的场景,则选用并列排行榜。

2 Redis严格排行榜实现

(1)数据结构:利用Redis的有序数列集合(zset)实现。
(2)实现原理:
有序集合由三部分组成,KEY(键)、score(成员的得分)、member(成员)。有序集合的每一项,都是以键值对的形式存储,每一项都有一个分数。有序集合会根据score自动排序。利用这个特性,我们就可以实现排行榜了。

score 是数字类型,可以是整形也可以是浮点型。按照排行榜多级排序的要求,相同分值下按照先来后到的顺序排序(创建时间越早,排序越高),但是Redis相同分值,是按照 member 的 ASCII码进行排序。

所以,需要将 score进行改造,同时记录得分与时间信息。实现方式有两种:
方式一,score 为整数,采用“得分 + 时间差”格式,比如:10 + (1534694400 - 1534649521) = 44889
方式二,score 为浮点数,采用“整数部分使用得分,小数部分使用时间差(截止时间减去创建时间)”格式。比如:10.44879

一般建议用第二种方式,因为,当需求不仅需要排序,还需展示得分时,可以将 score 强制转化成整形,即可获取到得分。需要注意的是,得分最好不要太大, score得分尽量控制在16位以下(浮点数时,小数点前后位数和不要超过16位,最好15位)。超过16位后,score值存入redis,会发生精度丢失。

相关文章

  • 严格排行榜Redis实现

    1 常见排行榜 排行榜主要分为两种,一种是并列排行榜(存在相同排名的情况),一种是严格排行榜(分先后顺序,不存在并...

  • redis实现热搜排行榜及历史搜索记录

    一. 前言 热搜排行榜实现要点: 性能/简单/时效 .redis性能高是公认的, redis的数据结构zset有个...

  • redis3.0.4编译安装

    Redis的应用场景:缓存系统、计数器、排行榜、消息队列、实时系统,基本上社交媒体的功能都可以通过Redis实现。...

  • redis实现排行榜

    1 前言 实现一个排版榜,我们通常想到的就是mysql的order by 简单粗暴就撸出来了。但是这样真的优雅吗?...

  • Redis实现排行榜

    ZSet有序集合 redis的有序集合与集合一样也是String类型元素的集合,不允许有重复的元素。每一个元素都会...

  • 跳跃表python实践

    redis的zset常用场景:统计日活;打赏排行榜;天梯榜等zset底层基于跳跃表实现 跳跃表代码实现,练习版

  • 使用redis实现排行榜

    写在前面 排行榜在很多地方都能使用到,redis的zset可以很方便地用来实现排行榜功能。本文是一个示例。 聊聊 ...

  • 缓存穿透、雪崩、击穿解决方案

    Redis相关数据结构 Redis List适用场景为:排名、排行榜、近期访问数据列表等业务。Redis Set适...

  • Redis实现实时排行榜

    游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家...

  • redis实战之使用redis实现排行榜(转)

    设想在一个游戏中,有上百万的玩家数据,如果现在需要你根据玩家的经验值整理一个前20名的排行榜,你会怎么做呢? 一般...

网友评论

      本文标题:严格排行榜Redis实现

      本文链接:https://www.haomeiwen.com/subject/wmlvaftx.html