ben548
V2EX  ›  Redis

Redis 的 zset 按 score 排序做分页的时候怎么保证数据不丢失?

  •  
  •   ben548 · Jun 26, 2023 via Android · 3181 views
    This topic created in 1231 days ago, the information mentioned may be changed or developed.
    因为 zset 中可以存在 score 相同的数据,按 score 来查询下一页时,怎么保证下一页相同的 score 数据不丢失呢?
    9 replies  •  2023-06-27 14:21:24 +08:00
    SorcererXW
    SorcererXW
    Jun 27, 2023
    1
    - 最好的办法是保证 score 不重复,score 范围这么大,计算 score 的时候多引入一些字段让 score 不冲突即可

    - 如果 score 肯定有相同的:每一次查询后,把最后那个 score 的所有项目,生成一个 bloom filter ,存下来或者透传。在查询下一页的时候,把对应的 score 的数据全拉出来,做一层过滤。
    yemoluo
    yemoluo
    Jun 27, 2023
    2
    score 是 float64 吧,你把平时的 score + 左边补 0 的 id
    guxingke
    guxingke
    Jun 27, 2023
    3
    全查 业务内存排序 sort by score , id
    ben548
    ben548
    OP
    Jun 27, 2023
    4
    @SorcererXW 好麻烦
    ben548
    ben548
    OP
    Jun 27, 2023
    5
    @guxingke ?你这个是数据库的 order by 吧,redis 不能这么干
    Dlin
    Dlin
    Jun 27, 2023
    6
    我寻思着,也没有啥丢失啊,zrange key minScore maxScore byscore limit offset count
    Dlin
    Dlin
    Jun 27, 2023
    7
    @Dlin The order of elements is from the lowest to the highest score. Elements with the same score are ordered lexicographically.
    Dlin
    Dlin
    Jun 27, 2023
    8
    @Dlin 好吧,limit 是 6.2 增加的参数
    Dlin
    Dlin
    Jun 27, 2023
    9
    可是 ZRANGEBYSCORE 也应该不会有什么问题吧?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   820 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:50 · PVG 07:50 · LAX 15:50 · JFK 18:50
    ♥ Do have faith in what you're doing.