From 58b0768a3002a06a57a4df90ab136ce6c035e52d Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 23 Aug 2025 15:53:03 +0800 Subject: [PATCH] fix redis key --- app/helper/redis.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/app/helper/redis.py b/app/helper/redis.py index 858e77bf..a74a0be6 100644 --- a/app/helper/redis.py +++ b/app/helper/redis.py @@ -1,6 +1,6 @@ import json import pickle -from typing import Any, Optional, Generator, Tuple, AsyncGenerator +from typing import Any, Optional, Generator, Tuple, AsyncGenerator, Union from urllib.parse import quote import redis @@ -155,11 +155,13 @@ class RedisHelper(metaclass=Singleton): return f"{region}:key:{quote(key)}" @staticmethod - def __get_original_key(redis_key: str) -> str: + def __get_original_key(redis_key: Union[str, bytes]) -> str: """ 从Redis键中提取原始key """ try: + if isinstance(redis_key, bytes): + redis_key = redis_key.decode("utf-8") parts = redis_key.split(":key:") return parts[-1] except Exception as e: @@ -393,6 +395,20 @@ class AsyncRedisHelper(metaclass=Singleton): region = self.__get_region(quote(region)) return f"{region}:key:{quote(key)}" + @staticmethod + def __get_original_key(redis_key: Union[str, bytes]) -> str: + """ + 从Redis键中提取原始key + """ + try: + if isinstance(redis_key, bytes): + redis_key = redis_key.decode("utf-8") + parts = redis_key.split(":key:") + return parts[-1] + except Exception as e: + logger.warn(f"Failed to parse redis key: {redis_key}, error: {e}") + return redis_key + async def set(self, key: str, value: Any, ttl: Optional[int] = None, region: Optional[str] = "DEFAULT", **kwargs) -> None: """ @@ -501,12 +517,12 @@ class AsyncRedisHelper(metaclass=Singleton): async for key in self.client.scan_iter(redis_key): value = await self.client.get(key) if value is not None: - yield key, deserialize(value) + yield self.__get_original_key(key), deserialize(value) else: async for key in self.client.scan_iter("*"): value = await self.client.get(key) if value is not None: - yield key, deserialize(value) + yield self.__get_original_key(key), deserialize(value) except Exception as e: logger.error(f"Failed to get items from Redis, region: {region}, error: {e}")