GETEXPIRE
命令用于獲取給定鍵的剩余生存時(shí)間(以秒為單位)。如果鍵不存在或已過(guò)期,該命令將返回 -1 或 nil。要處理過(guò)期數(shù)據(jù),您可以采取以下策略:
使用 GETEXPIRE
檢查鍵是否已過(guò)期:
EXPIRE key seconds
if GETEXPIRE key == -1 or GETEXPIRE key == nil then
-- 鍵已過(guò)期或不存在
key = KEYS[1]
redis.call('DEL', key) -- 刪除過(guò)期鍵
else
-- 鍵未過(guò)期
return redis.call('GET', key)
end
使用 TTL
命令檢查鍵的剩余生存時(shí)間:
TTL key
if TTL key == -1 then
-- 鍵不存在或已過(guò)期
key = KEYS[1]
redis.call('DEL', key) -- 刪除過(guò)期鍵
else
-- 鍵未過(guò)期
return redis.call('GET', key)
end
使用 Lua 腳本來(lái)原子性地檢查過(guò)期并刪除鍵:
if redis.call("GET",KEYS[1]) ~= false then
return redis.call("DEL",KEYS[1])
else
return -1
end
然后使用 EVAL
命令執(zhí)行此腳本:
EVAL script 1 your_key
請(qǐng)注意,這些方法可能會(huì)導(dǎo)致在鍵過(guò)期時(shí)產(chǎn)生競(jìng)爭(zhēng)條件,因此在高并發(fā)場(chǎng)景下要謹(jǐn)慎使用。在實(shí)際應(yīng)用中,您可能需要考慮使用其他策略,例如設(shè)置鍵的過(guò)期時(shí)間時(shí)使用 EXPIREAT
命令,或者在應(yīng)用程序中維護(hù)一個(gè)過(guò)期數(shù)據(jù)的列表,定期檢查并刪除過(guò)期數(shù)據(jù)。