美文网首页
incr+zadd+小根堆,实现简易topK榜单

incr+zadd+小根堆,实现简易topK榜单

作者: 2016晓 | 来源:发表于2022-08-24 12:23 被阅读0次
image.png

很容易想到使用redis的zset来做。为了能保证用户分数安全的并发累加,配合使用incr操作(每个贡献用户占一个key)。逻辑如下:


image.png

如果能保证参与的用户不会很多,zset不会过大就可以每次直接zadd。

如果参与的人很多,但业务只关心头部的少量用户,就可以在每台容器上,维护一个本地top3,能够进入的用户,才会执行zadd更新。逻辑如下:


image.png

同时进行很多个pk赛,要维护多个小根堆:


image.png

以上逻辑尽可能的不编辑lua脚本,redis操作时,少了原子性:

并发度特别高时,可能前incr操作后的分数,后计入zset了。(但用户后续更新时,能恢复。)

相关文章

  • incr+zadd+小根堆,实现简易topK榜单

    很容易想到使用redis的zset来做。为了能保证用户分数安全的并发累加,配合使用incr操作(每个贡献用户占一个...

  • TopK及小根堆

  • 小根堆的应用1

    思路:利用小根堆实现

  • 堆 &heap & priority_queue &实现

    [toc] 什么是堆? 堆是一种数据结构,可以用来实现优先队列 大根堆 大根堆,顾名思义就是根节点最大。我们先用小...

  • heap_堆_PriorityQueues

    一、概念 1. Priority Queues:即带有优先级的队列(先进先出),较好实现方式:大根堆,或小根堆。 ...

  • TOPK 问题

    TOPK 问题 描述 如从海量数字中寻找最大的 k 个,这类问题我们称为 TOPK 问题,通常使用堆来解决: 求前...

  • 二叉树的应用

    1 排序二叉树和堆 用途树结构关系存储方式应用(大根)堆排序完全二叉树根>左子树,根>右子树数组堆排序,取topk...

  • 拼多多笔试

    实现 HashMap topK 有序数组求交集

  • 堆的创建

    二叉堆的定义 堆通常由大根堆和小根堆,大根堆表示父节点大于字节点,小根堆相反eg:小根堆 可以看出堆屎一个完全二叉...

  • 2018-08-14 LeetCode数据流的中位数

    较小的一半数放在大根堆较大的在小根堆,大根堆堆顶为较小数的最大值,小根堆的堆顶为较大数的最小值始终保持大根堆和小根...

网友评论

      本文标题:incr+zadd+小根堆,实现简易topK榜单

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