fix redis key

This commit is contained in:
jxxghp
2025-08-23 15:53:03 +08:00
parent 3b04506893
commit 58b0768a30
+20 -4
View File
@@ -1,6 +1,6 @@
import json import json
import pickle import pickle
from typing import Any, Optional, Generator, Tuple, AsyncGenerator from typing import Any, Optional, Generator, Tuple, AsyncGenerator, Union
from urllib.parse import quote from urllib.parse import quote
import redis import redis
@@ -155,11 +155,13 @@ class RedisHelper(metaclass=Singleton):
return f"{region}:key:{quote(key)}" return f"{region}:key:{quote(key)}"
@staticmethod @staticmethod
def __get_original_key(redis_key: str) -> str: def __get_original_key(redis_key: Union[str, bytes]) -> str:
""" """
从Redis键中提取原始key 从Redis键中提取原始key
""" """
try: try:
if isinstance(redis_key, bytes):
redis_key = redis_key.decode("utf-8")
parts = redis_key.split(":key:") parts = redis_key.split(":key:")
return parts[-1] return parts[-1]
except Exception as e: except Exception as e:
@@ -393,6 +395,20 @@ class AsyncRedisHelper(metaclass=Singleton):
region = self.__get_region(quote(region)) region = self.__get_region(quote(region))
return f"{region}:key:{quote(key)}" 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, async def set(self, key: str, value: Any, ttl: Optional[int] = None,
region: Optional[str] = "DEFAULT", **kwargs) -> 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): async for key in self.client.scan_iter(redis_key):
value = await self.client.get(key) value = await self.client.get(key)
if value is not None: if value is not None:
yield key, deserialize(value) yield self.__get_original_key(key), deserialize(value)
else: else:
async for key in self.client.scan_iter("*"): async for key in self.client.scan_iter("*"):
value = await self.client.get(key) value = await self.client.get(key)
if value is not None: if value is not None:
yield key, deserialize(value) yield self.__get_original_key(key), deserialize(value)
except Exception as e: except Exception as e:
logger.error(f"Failed to get items from Redis, region: {region}, error: {e}") logger.error(f"Failed to get items from Redis, region: {region}, error: {e}")