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
命令,或者在應用程序中維護一個過期數據的列表,定期檢查并刪除過期數據。