每天如何在Lua中使Redis过期?

时间:2019-04-02 17:25:13

标签: redis lua

我正在openresty(1.13.6.2)中使用lua脚本禁止蜘蛛。它将探测非法IP并添加到黑名单。

res , err = cache:sadd('black-list', ngx.var.remote_addr)

现在我想让黑名单每天12:00过期(发布禁令ip)。每天如何到期设置?正确的方法是什么?这是禁止的禁止代码:

is_black ,err = cache:sismember('black_list', ngx.var.remote_addr)
if is_black == 1 then
    ngx.exit(ngx.HTTP_FORBIDDEN)
    goto label
end

1 个答案:

答案 0 :(得分:1)

作为替代方案:您可以使用string redis数据类型来保存IP,而不是set(为方便搜索,您可以在密钥中使用一些通用部分,例如black_list ; redis键可以用分号分隔):

# redis cli commands
set black_list:127.0.0.1 127.0.0.1 EX 3600 # will be expire in 1 hour
set black_list:127.0.0.2 127.0.0.2 EX 60   # will be expire in 1 minute 
set black_list:127.0.0.3 127.0.0.3 EX 60   # will be expire in 1 minute

在这种情况下,您可以计算(12:00 - now并为每个IP记录设置TTL (time to live),它们将在需要的时间自动过期,而无需执行代码中的任何其他操作。