fix(user): don't invalidate user cache when user is connecting to spectator-server
resolve the sixth of #90
This commit is contained in:
22
app/service/subscribers/user_cache.py
Normal file
22
app/service/subscribers/user_cache.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from app.dependencies.database import get_redis
|
||||
from app.log import logger
|
||||
from app.service.user_cache_service import get_user_cache_service
|
||||
|
||||
from .base import RedisSubscriber
|
||||
|
||||
KEY = "user:online_status"
|
||||
|
||||
|
||||
class UserOnlineSubscriber(RedisSubscriber):
|
||||
async def start_subscribe(self):
|
||||
await self.subscribe(KEY)
|
||||
self.add_handler(KEY, self.on)
|
||||
self.start()
|
||||
|
||||
async def on(self, c: str, s: str): # noqa: ARG002
|
||||
user_id = int(s)
|
||||
logger.info(f"Received user online status update for user_id: {s}")
|
||||
await get_user_cache_service(get_redis()).invalidate_user_cache(user_id)
|
||||
|
||||
|
||||
user_online_subscriber = UserOnlineSubscriber()
|
||||
@@ -244,7 +244,7 @@ class UserCacheService:
|
||||
"""使用户缓存失效"""
|
||||
try:
|
||||
# 删除用户信息缓存
|
||||
pattern = f"user:{user_id}*"
|
||||
pattern = f"user:{user_id}:ruleset:*"
|
||||
keys = await self.redis.keys(pattern)
|
||||
if keys:
|
||||
await self.redis.delete(*keys)
|
||||
@@ -252,6 +252,18 @@ class UserCacheService:
|
||||
except Exception as e:
|
||||
logger.error(f"Error invalidating user cache: {e}")
|
||||
|
||||
async def invalidate_user_all_cache(self, user_id: int):
|
||||
"""使用户所有缓存失效"""
|
||||
try:
|
||||
# 删除用户信息缓存
|
||||
pattern = f"user:{user_id}*"
|
||||
keys = await self.redis.keys(pattern)
|
||||
if keys:
|
||||
await self.redis.delete(*keys)
|
||||
logger.info(f"Invalidated {len(keys)} all cache entries for user {user_id}")
|
||||
except Exception as e:
|
||||
logger.error(f"Error invalidating user all cache: {e}")
|
||||
|
||||
async def invalidate_user_scores_cache(self, user_id: int, mode: GameMode | None = None):
|
||||
"""使用户成绩缓存失效"""
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user