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

Redis 对 zset 操作的问题

  •  
  •   zhyzhy · 2018-12-09 19:51:34 +08:00 · 7587 次点击
    这是一个创建于 2205 天前的主题,其中的信息可能已经有所发展或是发生改变。

    业务是这样的,对每一个活动做一个 zset 保存参与用户的 id 和参与时间
    判断的时候,如果返回 null,不知道是 key 被删了还是没有此 member,对于这两个情况后续操作不一样
    目前只得全部套上了 pipeline 先判断下 exist 这个 key

    用 redis-cli 的时候似乎对这两种情况也都是返回的 nil
    你们平时有这种情况吗,咋解决的呢。。。

    7 条回复    2018-12-10 15:38:37 +08:00
    charles2java
        1
    charles2java  
       2018-12-09 22:25:46 +08:00 via Android
    那就不要删除 key,设置为默认值?
    hbpeng
        2
    hbpeng  
       2018-12-10 09:11:00 +08:00 via iPhone
    pipeline 没办法解决吧 pipeline 里面第二条命令是没办法依赖第一条的结果的 感觉你这个只能用 lua
    br00k
        3
    br00k  
       2018-12-10 09:11:54 +08:00
    如果没有数据的我的操作是初始化一条数据进去。取的时候把这条过滤掉。
    server
        4
    server  
       2018-12-10 12:05:46 +08:00
    小哥,入库前不检查下用户吗?
    myzWILLmake
        5
    myzWILLmake  
       2018-12-10 14:51:20 +08:00
    不太清楚你使用 zset 是用来做什么业务的,但是可能对于 zset 的理解有些偏差。zset 的数据结构为跳表,单个数据为跳表中的一个节点。删除操作的话会将这个节点从这个跳表中移出并且释放掉。所以对于 zset 已经删除的节点就是不存在的数据,当然不会查到。
    zhyzhy
        6
    zhyzhy  
    OP
       2018-12-10 15:36:22 +08:00
    @hbpeng 是没法依赖第一条,所以 key exist 和 member value 的结果全部捞出来了,key 不存在就执行不存在的逻辑,不去查看 member 的结果了
    zhyzhy
        7
    zhyzhy  
    OP
       2018-12-10 15:38:37 +08:00
    @myzWILLmake = = 没看明白。。。我的意思是就比如 zrank myzset user1 这个命令,返回了 nil,我不知道到底是没有这个 zset,还是 zset 中没有 user1 这个 member
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3312 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:49 · PVG 08:49 · LAX 16:49 · JFK 19:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.