V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zhyzhy
V2EX  ›  Redis

Redis 对 zset 操作的问题

  •  
  •   zhyzhy · Dec 9, 2018 · 8308 views
    This topic created in 2709 days ago, the information mentioned may be changed or developed.

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

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

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