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

この例では、

  1. KEYS[1]是传递给Lua脚本的键名。
  2. Luaスクリプトに渡されるARGV[1]は、ディレイのタイムスタンプを表しています。
  3. redis.call(‘TIME’)[1]获取当前时间戳。

脚本的逻辑如下:

  1. 检查当前时间戳是否已经超过延时的时间戳。
  2. そうであれば、キーを削除して1を返す。
  3. そうでない場合は、キーと有効期限を設定して、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', <延时的时间戳>)

実際の遅延時間タイムスタンプへの置き換えをお忘れなく

bannerAds