旧文档,TODO重新总结
限流key,限流单位时间,限流数
实现思路:
string结构 key=限流key,value=请求计数,expired=限流单位时间
每次请求进来 判断value值 (1)超过限流数:限流 (2)未超过限流数:正常,value+1
问题:
请求不均匀时 可能 当前限流单位时间后1%的时间 和 下个限流单位时间的前%1的时间 请求量很大
限流key,限流单位时间,限流数
实现思路:
zset结构 key=限流key,value=任意值,score=当前时间,expired=限流单位时间
每次请求进来 zcount 限流key 0 (当前时间+限流单位时间) zremrangebyscore 限流key (当前时间+限流单位时间) max (1)超过限流数:限流 (2)未超过限流数:正常,zadd 限流key 当前时间 任意值
问题:
限流数较大时,可能单个zset结构值太大 可以分散为多个zset去尽可能避免
限流key,限流单位时间,限流数
实现思路: 往令牌桶里放令牌是一定速率均匀的
限流key,限流单位时间,限流数
实现思路: 令牌桶流出令牌是一定速率均匀的
令牌桶算法:用来保护自己,对调用者频率进行限流 漏桶算法:用来保护他人,对调用其它系统进行限流