Pipeline 与 Stream
→ 返回 Redis
Pipeline
批量发命令,一次 RTT,非事务;某条失败需业务处理。
MULTI / EXEC
命令队列原子执行;无回滚;Cluster 需同 slot。
WATCH
乐观锁;EXEC 前 key 被改则失败。
Lua
单 key 或 Cluster 同 slot 多 key 原子;锁、限流、库存:
local stock = tonumber(redis.call('GET', KEYS[1]))
if stock < tonumber(ARGV[1]) then return -1 end
return redis.call('DECRBY', KEYS[1], ARGV[1])Pub/Sub
fire-and-forget,不持久化;离线丢消息。适合:缓存失效广播、配置刷新。
Stream + 消费组
XADD orders * userId 1 amount 99.5
XGROUP CREATE orders grp1 0 MKSTREAM
XREADGROUP GROUP grp1 c1 COUNT 10 BLOCK 5000 STREAMS orders >
XACK orders grp1 <id>
XPENDING orders grp1 - + 10
XCLAIM ...| 概念 | 说明 |
|---|---|
| PEL | 已投递未 ACK |
| 消费者宕机 | XCLAIM 或巡检 pending |
| vs Kafka | Stream 轻量;高吞吐用 Kafka |