首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  Redis

redis 的 zset 可以设置多个权重吗?

  •  
  •   kayseen · 111 天前 · 6186 次点击
    这是一个创建于 111 天前的主题,其中的信息可能已经有所发展或是发生改变。
    
    使用 redis 的 zset
    
    比如我在 key 中操作 3 个学生:  student1 和 student2 和 student3
    需要对他们先通过性别,在通过出生日期排序
    然后设置权重  
    
    zadd key student1 score 性别 score 出生日期
    zadd key student2 score 性别 score 出生日期
    zadd key student3 score 性别 score 出生日期
    			  
                  
    请问 redis 中的 zset 可以吗?
    
    我在 Python 中设置两个 score 好像是无效的,不知道是不是我的方法不对
    
    
    12 回复  |  直到 2019-11-05 11:11:47 +08:00
        1
    jybox   111 天前
    不可以,请用多个 ZSET 来做不同维度的排序
        2
    kayseen   111 天前
    @jybox
    请教下,
    比如我在 key1 中排序 student1 和 student2 和 student3 的性别:
    zadd key student1 score 性别
    zadd key student2 score 性别
    zadd key student3 score 性别

    在 key2 中排序 student1 和 student2 和 student3 的出生日期:
    zadd key student1 score 出生日期
    zadd key student2 sscore 出生日期
    zadd key student3 score 出生日期


    那么最后怎么再合并排序呢? 请问可以实现吗?
        3
    imherer   111 天前
    你这样就搞的太复杂了,redis 不是你这样用的。 要不还是回归到 rds 中去实现吧,可能会好一点
        4
    momocraft   111 天前
    score 只能一个

    如果你可以定义出一个你想要的顺序的 score 就 OK
        5
    IamUNICODE   111 天前
    不能这样玩的
        6
    Ingo   111 天前 via iPhone
    可以考虑把性别和出生日期编码成一个数字
        7
    boob   110 天前 via Android
    先通过性别,在通过出生日期排序
    然后设置权重 ???没听懂
        8
    boob   110 天前 via Android
    权重= 性别*日期即可, 如果男大女小, 男=1 女=-1 即可
        9
    lijialiang93   110 天前
    用 ZUNIONSTORE 可以将两个 zset 合并成一个新 zset,可以合并时分别设置权重
    https://redis.io/commands/zunionstore
        10
    jifengg   108 天前
    我给你一个我之前的操作。
    首先明确一点,score 是可以用小数的。
    ok,假设你的性别对应 1,2.
    出生日期,你用自己一套算法换算成 0.xxxx 的小于 1 的小数。两个一加,得到 2.xxxxx 或者 1.xxxx 的 score 值,就可以设置到 zset 里面了。
    注意,小数的精度有限,不能太多位。

    这个有个弊端,就是你只能用这两者结合的正序或者倒序,不能一个正序一个倒序。
    不过如果你没有这个需求,那么这种方式你可以考虑一下。
        11
    kayseen   108 天前
    @jifengg 感谢建议,我现在就用的这种方法,谢谢~
        12
    iIli1iIliIllLiL   37 天前
    @boob 乘以-1 会导致负数部分的排序与正数的排序相反,计算好长度乘以 100 可能会更好?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2701 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 12:53 · PVG 20:53 · LAX 04:53 · JFK 07:53
    ♥ Do have faith in what you're doing.