业务场景
有一个限流系统要求限定用户的某个行为在指定的时间里只能允许发生 N 次
限流思路
这个限流需求中存在一个滑动时间窗口,而 zset 数据结构的 score 值,恰好可以通过 score 的范围来圈出这个时间窗口。我们只需要保留这个时间范围窗口,窗口之外的数据都忽略掉。这个 zset 的 value 需要保证唯一性,将value设置成毫秒时间戳即可。
/**
* 判断当前操作是否允许
* userId 用户Id
* actionKey 操作key名
* period 时间窗口
* maxCount 最多请求次数
*/
public boolean isActionAllowed(String userId, String actionKey, int period, int maxCount) {