feat:重构UI
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import asyncio
|
||||
import time
|
||||
import redis.asyncio as redis
|
||||
from ..core import get_settings
|
||||
@@ -10,7 +11,11 @@ class RateLimitService:
|
||||
self.redis: redis.Redis | None = None
|
||||
|
||||
async def connect(self):
|
||||
self.redis = redis.from_url(settings.redis_url)
|
||||
try:
|
||||
self.redis = redis.from_url(settings.redis_url)
|
||||
await self.redis.ping()
|
||||
except Exception:
|
||||
self.redis = None
|
||||
|
||||
async def disconnect(self):
|
||||
if self.redis:
|
||||
@@ -23,9 +28,14 @@ class RateLimitService:
|
||||
now = int(time.time())
|
||||
window_key = f"rl:{key}:{now // 60}"
|
||||
|
||||
count = await self.redis.incr(window_key)
|
||||
if count == 1:
|
||||
await self.redis.expire(window_key, 60)
|
||||
try:
|
||||
count = await self.redis.incr(window_key)
|
||||
if count == 1:
|
||||
await self.redis.expire(window_key, 60)
|
||||
except asyncio.CancelledError:
|
||||
return True
|
||||
except Exception:
|
||||
return True
|
||||
|
||||
return count <= limit
|
||||
|
||||
|
||||
Reference in New Issue
Block a user