Есть ли способ локального кэширования python словарей и периодического истечения срока действия отдельных записей? - PullRequest
0 голосов
/ 03 февраля 2020

Я выполняю внешние вызовы API с помощью сценария python, и каждый ответ на вызов представляет собой словарь формата JSON.

Ответ от API меняется не слишком часто, возможно каждые 3 месяца или около того. В идеале я хотел бы создать пару ключ-значение между параметром API и ответом.

Я также не хочу, чтобы при очистке кеша все записи истекали, просто проверка в cacheFile / localDatabase, для этого параметра, а затем решить, следует ли удалить эту запись. Если для этого параметра существует значение, то посмотрите, превысила ли эта запись «время жизни», если нет, то используйте это значение, если оно есть, затем используйте функцию API, чтобы выполнить этот вызов, и замените значение. , Если значение не существует, то создайте новую запись.

Мне потребуется каждый раз обращаться к этому словарю для моего скрипта, чтобы собирать информацию о параметре.

Я пробовал соленые огурцы и pickle dump, но, похоже, это абсолютно плохая идея, поскольку она очистит весь кеш, а не ключ, срок действия которого истек.

Есть ли ссылка, которая может предоставить полезную информацию, я не уверен, Я ищу правильные термины.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 03 февраля 2020

Существует библиотека python с именем expiringdict, которая подходит для вашего случая использования.

Вы можете создать кеш, как показано ниже:

from expiringdict import ExpiringDict
cache = ExpiringDict(max_len=100, max_age_seconds=180) # Three mins
# After 3 mins of inserting the key it will no longer exist in the dictionary

Вы можете проверить, присутствует ли ключ в кэше, если он присутствует, тогда вы можете использовать значение, иначе это означает, что ключ истек, и вам нужно сделать вызов API.

if "key" in cache: # Will return false if 3 mins have surpassed
   return cache["key"]
else:
   value = #make api call and get value
   cache["key"] = value # Will store the value for 3 mins
   return value

Ссылка: https://pypi.org/project/expiringdict/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...