Introduction

// Without Lua
App → Redis → App → Redis   (multiple network calls)

// With Lua:
App → Redis (script runs fully inside Redis)

Why INCR + EXPIRE is important

Use case: API rate limiting

  1. You want max N requests per minute.

  2. Flow:

    INCR ip:1.2.3.4
    EXPIRE ip:1.2.3.4 60
    
  3. Atomicity concern:

  4. Solution:

Example Lua script:

local current = redis.call("INCR", KEYS[1])
if current ==1 then
    redis.call("EXPIRE", KEYS[1], ARGV[1])
end
return current