Redis 遅延二重削除コードの書き方
Redis で遅延二重削除を実装するコードは、Lua スクリプトを使用して作成できます。例を以下に示します。
local key = KEYS[1]
local timestamp = tonumber(ARGV[1])
local currentTime = tonumber(redis.call('TIME')[1])
if currentTime >= timestamp then
redis.call('DEL', key)
return 1
else
redis.call('SET', key, timestamp, 'EX', timestamp - currentTime)
return 0
end
この例では、
- KEYS[1]是传递给Lua脚本的键名。
- Luaスクリプトに渡されるARGV[1]は、ディレイのタイムスタンプを表しています。
- redis.call(‘TIME’)[1]获取当前时间戳。
脚本的逻辑如下:
- 检查当前时间戳是否已经超过延时的时间戳。
- そうであれば、キーを削除して1を返す。
- そうでない場合は、キーと有効期限を設定して、0 を返します。
このLuaスクリプトを使用するには、RedisクライアントのEVALコマンドを使用します。例えば、RedisのPythonクライアントredis-pyを使用すると、
import redis
r = redis.Redis()
script = '''
local key = KEYS[1]
local timestamp = tonumber(ARGV[1])
local currentTime = tonumber(redis.call('TIME')[1])
if currentTime >= timestamp then
redis.call('DEL', key)
return 1
else
redis.call('SET', key, timestamp, 'EX', timestamp - currentTime)
return 0
end
'''
r.eval(script, 1, 'mykey', <延时的时间戳>)
実際の遅延時間タイムスタンプへの置き換えをお忘れなく