Lua 语言 + Redis/Nginx 组合
Lua 是一种轻量、高效、可嵌入的脚本语言,语法简洁,广泛用于游戏开发、嵌入式脚本、配置文件和 Redis/Nginx 扩展。
与 Redis 结合
Redis 支持执行 Lua 脚本(EVAL 命令),由于 Redis 单线程,Lua 脚本是原子执行的。
典型用途
- 缓存数据 — Lua 脚本操作 Redis 实现复杂缓存逻辑
- 分布式锁 — Redis 原子性 + Lua 脚本实现并发控制
- 限流 — 计数器 + 过期时间 + Lua 原子操作
与 Nginx 结合
Nginx 的 Lua 模块(OpenResty)可用 Lua 扩展功能:
- 请求预处理 — 身份验证、路由(网关层完成)
- 动态响应 — subrequest 机制动态生成内容
- 访问控制 — IP 黑白名单、请求频率限制
Node.js 中调用 Lua
通过 ioredis 执行 Lua 脚本:
js
const redis = new Redis()
// 执行 Lua 脚本
const lua = `
local current = redis.call('GET', KEYS[1])
if current and tonumber(current) > tonumber(ARGV[1]) then
return redis.call('DECR', KEYS[1])
end
return 0
`
const result = await redis.eval(lua, 1, 'counter', '10')
redis.call()在 Lua 中调用 Redis 命令,脚本整体原子执行。