Alice52 / database

ddf13ad8d4be76a80a336418b5cf5727bf6e3059
gitee.com
MIT License
0 stars 0 forks source link

[redis] zset #62

Closed Alice52 closed 3 years ago

Alice52 commented 3 years ago

使用场景

  1. 活动的排行榜:

    • 缓存失效模式: 需要大量的计算才能得到, 且有一个人变了, 其他人也会被影响
    • 有些则直接查询数据库的: 因为 redis 只能排名, 之后还是要查询数据库的, 数据量不大的情况下不如直接查数据库
  2. feed 类产品

    • 关注/推文
    • 有时间顺序
  3. 抽奖

实现

  1. 跳跃表

    • 空间换时间
    • CRUD:O(logn)
    • 每一层都是一个有序链表, u/d/r/l 四个指针
    • 抛硬币算法
    • code 实现也不算太难: 找到元素或要插入的位置的Left

practice

  1. 餐厅比拼使用 redis 做排行榜
    • 排行榜个数有限
    • 需要资源计算出来
    • 裁判打分比较集中
    • 不是个人的, 基于餐厅
  2. PK 没有使用
    • 数据量问题
    • 员工端的: 排名随时都会变, 且变化时间不集中
    • 使用 redis 会出现很多数据: 20w 个, 多维度 [oc/do/gm] 等
    • 多字段排序 + 只维护自己[@row_number + where + count]+topN: 存 redis 也只需要存TopN
    • 每次操作前异步更新删除失效的人 + 定时任务