redis pipeline 模式
redis pipeline
是一个客户端提供的机制,与 redis
无关。
pipeline
不具备事务性。
- 目的:节约网络传输时间。
- 通过一次发送多条请求命令,从而减少网络传输时间。
redis 实现限流功能,有哪几种方式 ?
- 限流:一段时间内(
period
),某行为(action
)允许操作的最大次数(mac_count
)。
固定时间窗口限流
滑动时间窗口限流
- 滑动窗口内的行为统计。
- 解决了窗口间的统计异常。
- 滑动窗口的容量、移动速率是固定的。
# 指定用户 user_id 的某个行为 action 在特定时间内 period 只允许发生该行为的最大次数 max_count
# 维护一次时间窗口,将窗口外的记录全部清理掉,只保留窗口内的记录
local function is_action_allowed(red, userid, action, period, max_count)
local key = tab_concat({
"hist", userid, action}, ":")
local now = zv.time()
red:init_pipeline() # 同时发送多条命令
red:zadd(key, now, now)