GETEXPIRE
命令用于获取给定键的剩余生存时间(以秒为单位)。如果键不存在或已过期,该命令将返回 -1 或 nil。要处理过期数据,您可以采取以下策略:
使用 GETEXPIRE
检查键是否已过期:
EXPIRE key seconds
if GETEXPIRE key == -1 or GETEXPIRE key == nil then
-- 键已过期或不存在
key = KEYS[1]
redis.call('DEL', key) -- 删除过期键
else
-- 键未过期
return redis.call('GET', key)
end
使用 TTL
命令检查键的剩余生存时间:
TTL key
if TTL key == -1 then
-- 键不存在或已过期
key = KEYS[1]
redis.call('DEL', key) -- 删除过期键
else
-- 键未过期
return redis.call('GET', key)
end
使用 Lua 脚本来原子性地检查过期并删除键:
if redis.call("GET",KEYS[1]) ~= false then
return redis.call("DEL",KEYS[1])
else
return -1
end
然后使用 EVAL
命令执行此脚本:
EVAL script 1 your_key
请注意,这些方法可能会导致在键过期时产生竞争条件,因此在高并发场景下要谨慎使用。在实际应用中,您可能需要考虑使用其他策略,例如设置键的过期时间时使用 EXPIREAT
命令,或者在应用程序中维护一个过期数据的列表,定期检查并删除过期数据。