简单限流
如何限定用户的某个行为在指定的时间里只能允许发生 N 次?eg:一分钟内只允许最多回复 5 个帖子。
整体思路就是:每一个行为到来时,都维护一次时间窗口。将时间窗口外的记录全部清理掉,只保留窗口内的记录。zset 集合中只有 score 值非常重要,value 值没有特别的意义,只需要保证它是唯一的就可以了。(设置 zset 过期时间,避免冷用户持续占用内存)
漏斗限流
Redis 4.0 提供了一个限流 Redis 模块,它叫 redis-cell。该模块也使用了漏斗算法,并提供了原子的限流指令。