关于 Redis 的 PTTL 命令的一个疑惑 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Ymmmmmmmm
V2EX    Java

关于 Redis 的 PTTL 命令的一个疑惑

  •  
  •   Ymmmmmmmm 2023-01-02 23:54:54 +08:00 1877 次点击
    这是一个创建于 1067 天前的主题,其中的信息可能已经有所发展或是发生改变。

    PTTL 命令的伪代码:

    def PTTL(key):

    #键不存在于数据库 if key not in redisDb.dict return -2 #尝试获取键的过期时间 #如果键没有设置过期时间,那么 expire_time_in_ms 将为 none expire_time_in_ms = redisDb.expires.get(key) #键没有设置过期时间 if expire_time_in_ms is None: return -1 #获取当前时间 now_ms = ge_current_unix_timestamp_in_ms() #返回过期时间 return expire_time_in_ms - now_ms 

    就这个方法而言,为什么 redis 要返回-2 和-1 来表示键不存在于数据库中和键没有设置过期时间,因为 redis 过期的键不会被立即清除掉,expire_time_in_ms-now_ms 是会存在-2 和-1 ,这样不是会造成误判嘛,-2 的话到无所谓应该反正过期了,也可以理解为该键不存在于数据库中(当然不能使用 PTTL 命令来判断一个 key 是否存在),但是-1 的话含义就差老大了

    8 条回复    2023-01-09 17:20:17 +08:00
    TJT
        1
    TJT  
       2023-01-03 00:09:19 +08:00
    多看看文档: https://redis.io/commands/pttl/

    没有什么特别的,就是因为负数被定义为错误而已,利用好这个错误可以区分出不同的情况,减少后续不必要的查询。
    Ymmmmmmmm
        2
    Ymmmmmmmm  
    OP
       2023-01-03 00:31:44 +08:00
    @TJT 好吧,个人觉得错误可以定义成唯一点比较好,不应该有歧义
    v2wtf
        3
    v2wtf  
       2023-01-03 09:35:22 +08:00
    @Ymmmmmmmm

    错误是多样的,需要进行多种错误分支处理。

    而正确往往都只会进行同一种分支处理。
    nicreve
        4
    nicreve  
       2023-01-03 10:35:13 +08:00
    “因为 redis 过期的键不会被立即清除掉,expire_time_in_ms-now_ms 是会存在-2 和-1”
    这个错误结论是怎么得出来的?你是不是对懒驱逐有什么误解?
    Ymmmmmmmm
        5
    Ymmmmmmmm  
    OP
       2023-01-06 17:27:04 +08:00
    @nicreve redis 服务器采用过期删除策略是惰性删除和定期删除,所以 redis 过期的键不会被立即清除掉,你的理解是,还望赐教
    nicreve
        6
    nicreve  
       2023-01-06 17:44:09 +08:00
    @Ymmmmmmmm 懒驱逐只是内部实现,对于客户端来说,访问一个已过期的 key 就是返回-2 ,不用关心这个 key 在 Redis 内是 10 分钟前被驱逐的还是访问时被驱逐的。
    说白了,你贴的伪代码逻辑就是错的,对于已过期的 key ,Redis 怎么可能返回 expire_time_in_ms - now_ms 呢?
    Ymmmmmmmm
        8
    Ymmmmmmmm  
    OP
       2023-01-09 17:20:17 +08:00
    @nicreve 受教了,多谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1310 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 17:15 PVG 01:15 LAX 09:15 JFK 12:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86