在Redis中實現分布式限流可以通過使用Redis的計數器和過期時間來實現。以下是一種基于計數器和過期時間的簡單實現方式:
以下是一個Python示例代碼:
import redis
class RateLimiter:
def __init__(self, redis_host, redis_port, limit, expire_time):
self.redis_conn = redis.Redis(host=redis_host, port=redis_port)
self.limit = limit
self.expire_time = expire_time
def is_allowed(self, key):
current_count = self.redis_conn.incr(key)
if current_count == 1:
self.redis_conn.expire(key, self.expire_time)
if current_count > self.limit:
return False
return True
# 使用示例
limiter = RateLimiter('localhost', 6379, 10, 60) # 限流10次/分鐘
if limiter.is_allowed('user1'):
print("Allow request")
else:
print("Reject request")
在上面的示例中,RateLimiter類初始化時傳入了Redis的主機和端口、限流閾值和過期時間。is_allowed方法用于判斷當前請求是否允許,通過遞增計數器并判斷是否超過限流閾值來實現限流功能。