如何每天在lua中使redis到期?

问题描述 投票:0回答:1

我在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
redis lua
1个回答
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),它们将在所需的时间内自动过期,而无需代码中的任何其他操作。

© www.soinside.com 2019 - 2024. All rights reserved.