如何使用 lua 在 redis 上设置每天过期的黑名单?

我正在使用 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
点赞
用户7499554
用户7499554

作为一个替代方案: 你可以使用 string redis 数据类型来保存 IP 地址, 而不是使用 set (为了方便搜索, 你可以在键名中使用一些共同的部分, 比如 black_list; redis 键名可以以分号分隔):

# redis cli 命令
set black_list:127.0.0.1 127.0.0.1 EX 3600 # 过期时间是1小时
set black_list:127.0.0.2 127.0.0.2 EX 60   # 过期时间是1分钟
set black_list:127.0.0.3 127.0.0.3 EX 60   # 过期时间是1分钟

这种情况下, 你可以计算每个 IP 记录的 TTL (time to live) (即存活时间), 并将它们自动在需要的时间内过期, 而无需进行任何其他操作。

2019-04-08 14:21:32