限流器,顾名思义就是限制流量,例如:10秒中限制100个请求。不管是在客户端还是服务端都会经常用到。
下面类举个服务端的简单限流器:
import redis
redis = redis.Redis("xxxx")
class Limiter(object):
"""
缺点:不能平滑限流。假设限定10秒100次请求,有可能在前5秒中,就已经达到了100次请求。
"""
def __init__(self, rate, count, expire, key):
"""
:param rate: 最高使用次数
:param count: 当前已使用次数
:param expire: 限流最小单位/s
:param key:
"""
self.rate = rate
self.count = count
self.expire = expire
self.key = key
if not redis.get(self.key):
redis.set(key=self.key, value=self.count, ex=self.expire)
def is_release(self):
"""
是否限流
:return:
"""
count = redis.get(self.key)
redis.set(self.key, count + 1)
return count < self.rate