固定窗口限流(每分钟 60 次)
固定窗口限流(每分钟 60 次)
INCR rate:api:u1001:202610121030
EXPIRE rate:api:u1001:202610121030 60 NX # NX:已设过期不重置
GET rate:api:u1001:202610121030 # 第 61 次触发限流
# 更稳写法(Lua 原子):
EVAL "local c=redis.call('INCR',KEYS[1]) if c==1 then redis.call('EXPIRE',KEYS[1],ARGV[1]) end return c" 1 rate:key 60库存扣减
库存扣减
SET stock:sku88 100
DECR stock:sku88 # 99
# 扣到负数说明超卖,需要补偿
# 推荐 Lua 原子判断:
EVAL "local s=tonumber(redis.call('GET',KEYS[1]) or '0') if s<=0 then return -1 end return redis.call('DECR',KEYS[1])" 1 stock:sku88先 GET 再 SET 的库存写法在并发下必超卖;判断与扣减必须在 Lua 或单命令里原子完成。