Я работаю над распределенной библиотекой, в которой у меня есть динамически создаваемый класс Config, который инициализирует атрибуты на основе аргументов ключевого слова, как показано ниже:
def get_data(config: Config) -> Any:
data: Any = ... # get data from config
if data is None:
# search SQL database using config parameters
...
return data
Проблема
Мне нужно кэшировать конфигурацию и соответствующие данные таким образом, чтобы данные можно было получить даже после перезапуска службы. Использование кэша в памяти, такого как lru_cache, не сохраняет данные при перезапуске, поэтому он не подходит для этого требования.
Требования:
Постоянное кэширование. Кэш должен сохранять данные на диске или в другом виде долговременного хранилища.
Эффективность извлечения. Кэш должен обеспечивать эффективное извлечение данных на основе параметров конфигурации. .
Поддержка сложных ключей. Механизм кэширования должен поддерживать сложные объекты в качестве ключей. например, пользователь может обеспечить извлечение нескольких элементов, но решение для кэширования должно кэшировать их по одному (если не существует лучшего решения), чтобы предотвратить множественный поиск, если один и тот же элемент запрашивается дважды в разных наборах элементов.< /li>
Вопросы:
Каковы рекомендуемые подходы или библиотеки для постоянного кэширования данных в Python, который подходит для этого варианта использования?
Как я могу сериализовать и хранить объекты Config и гарантировать, что их можно будет десериализовать для поиска в кеше после перезапуска службы?
Есть ли какие-либо конкретные соображения или подводные камни, о которых мне следует знать при реализации постоянного кэширования в распределенной системе?
PS: Я не ищу реализацию кода . Просто рекомендации по передовой практике/соображениям перед внедрением. Спасибо.
Я работаю над распределенной библиотекой, в которой у меня есть динамически создаваемый класс Config, который инициализирует атрибуты на основе аргументов ключевого слова, как показано ниже: [code]from typing import TypeVar, Any
def _init(self, **kwargs: dict[str, Serializable]) -> None: for key, value in kwargs.items(): setattr(self, key, value)
def _repr(self) -> str: return f'{self.__class__.__name__}({", ".join([f"{key}={value}" for key, value in vars(self).items()])})'
Config = type('Config', (object,), {'__init__': _init, '__repr__': _repr, 'to_dict': lambda self: vars(self)}) [/code] У меня есть функция get_data, которая извлекает данные на основе параметров Config. Если данные недоступны, он запрашивает базу данных SQL: [code]def get_data(config: Config) -> Any: data: Any = ... # get data from config if data is None: # search SQL database using config parameters ... return data [/code] Проблема Мне нужно кэшировать конфигурацию и соответствующие данные таким образом, чтобы данные можно было получить даже после перезапуска службы. Использование кэша в памяти, такого как lru_cache, не сохраняет данные при перезапуске, поэтому он не подходит для этого требования. Требования: [list] [*]Постоянное кэширование. Кэш должен сохранять данные на диске или в другом виде долговременного хранилища. [*]Эффективность извлечения. Кэш должен обеспечивать эффективное извлечение данных на основе параметров конфигурации. . [*]Поддержка сложных ключей. Механизм кэширования должен поддерживать сложные объекты в качестве ключей. например, пользователь может обеспечить извлечение нескольких элементов, но решение для кэширования должно кэшировать их по одному (если не существует лучшего решения), чтобы предотвратить множественный поиск, если один и тот же элемент запрашивается дважды в разных наборах элементов.< /li> [/list] Вопросы: [list] Каковы рекомендуемые подходы или библиотеки для постоянного кэширования данных в Python, который подходит для этого варианта использования? [*]Как я могу сериализовать и хранить объекты Config и гарантировать, что их можно будет десериализовать для поиска в кеше после перезапуска службы? [*]Есть ли какие-либо конкретные соображения или подводные камни, о которых мне следует знать при реализации постоянного кэширования в распределенной системе? [/list] PS: Я не ищу реализацию кода . Просто рекомендации по передовой практике/соображениям перед внедрением. Спасибо.
У меня есть REST API на серверной части, и этот API кэшируется Nginx (TTL около 10 м).
Но у меня проблема с количеством вызовов моего серверного API между моментами, когда срок действия кэша Nginx истекает, и кеш устанавливается снова.
Такое...
Ниже представлена моя реализация Otel для создания экземпляров SDK OpenTelemetry для метрик и трассировок. Я обнаружил, что метрики создаются всякий раз, когда обслуживаются запросы приложения, но трассировки создаются только при перезапуске этого...
Службы Springcloud с nacos, службы поставщика работают нормально, когда я исправляю ошибки и перезапускаю потребительскую службу, я вижу журнал ошибок: «org.apache.dubbo.rpc.RpcException: не удалось вызвать метод $invoke в службе...
Службы Springcloud с nacos, службы поставщика работают нормально, когда я исправляю ошибки и перезапускаю потребительскую службу, я вижу журнал ошибок: «org.apache.dubbo.rpc.RpcException: не удалось вызвать метод $invoke в службе...
Как сохранить введенные пользователем данные и спросить их, хотят ли они использовать их снова при перезапуске программы, чтобы им не приходилось вводить одно и то же каждый раз при закрытии программы?