排行榜和点赞设计

40 阅读2分钟

背景

排行榜和feed流中个人数据进行点赞

image.png

技术选型:Mysql、Redis zset、bloom filter

Redis zset

Redis zset使用跳表实现,能够在较低的一个时间复杂度中完成数据的排名、范围内排名数据查询等。一些常用的api如下:,针对于周榜功能的实现,需要用到api中的新增成员、变动其中成员的数据、获取当前成员所在的排名、获取某个区间段的全部成员等功能

  • 1. ZADD key score1 member1 [score2 member2]

    • 功能: 向有序集合添加一个或多个成员,或者更新已存在成员的分数

    • 返回值: 添加成功的元素个数(已存在的添加不成功)

  • 2. ZCOUNT key min max

    • 功能: 计算在有序集合中指定区间分数的成员数
    • 返回值: 区间内的元素个数
  • 3. ZINCRBY key increment member

    • 功能: 有序集合中对指定成员的分数加上增量 increment
    • 返回值: member增加后的分数
  • 4. ZREVRANK key member

    • 功能: 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
    • 返回值: member排名或者 nil
  • 5. ZLEXCOUNT key min max

    • 功能: 在有序集合中计算指定字典区间内成员数量
  • 6. ZRANGE key start stop [WITHSCORES]

    • 功能: 通过索引区间返回有序集合指定区间内的成员
    • 返回值: 区间内元素列表

点赞状态展示方案

bloom filter是一个典型的使用空间和时间来换取准确率的一种算法和数据结构

它实际上是由一个很长的二进制向量和一系列随机映射函数来实现,布隆过滤器可以用于检索一个元素是否在一个集合中,优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难,错误率是在于由于多个key的多个hash值还是有可能落到同一个slot的,就会导致检查该元素是否在布隆过滤器中返回一个已经错误存在假象。

image.png