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 = get_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 的话含义就差老大了
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.