Skip to content

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 命令,脚本整体原子执行。