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
命令,或者在应用程序中维护一个过期数据的列表,定期检查并删除过期数据。