Кэширование больше не должно быть трудным. Всего лишь несколько строк кода кэш Omoide мгновенно выведет ваши службы Python на следующий уровень!
Выпущенная библиотека : pypi
Исходный код : GitHub
Учебник №1 : мой блог или средний
Это надежное, высоко перестраиваемое и простое в интеграционном растворе кеша в памяти, написанном на Pure Python, без зависимостей.
Он предназначен для кеша уровня метода, обертываясь вокруг одного метода класса, используя аргументы вызовов метода в качестве ключа кеша и сохраняя его возвращаемое значение.
Настраиваемый в соответствии с вашим конкретным вариантом использования, предоставляет различные варианты истечения срока действия и обновления.
Очень удобный, очень легко интегрировать с простой декоратором (то есть аннотацией, для тех, кто поступает из Java), не нужно добавлять сложную логику в свой код, просто используйте @omoide_cache() в дополнение к любому методу в ваших услугах. Он будет автоматически генерировать кэш для вашего метода с настройками по умолчанию. Вы можете также настроить эти настройки с помощью параметров декоратора.
Справедливое предупреждение - этот проект находится на самом раннем этапе его жизненного цикла, в будущем будет много улучшений и исправлений ошибок. Все предложения и отчеты об ошибках очень приветствуются!
pip install omoide-cachegit clone https://github.com/jpleorx/omoide-cache.git
cd omoide-cache
pip install --editable . import time
from omoide_cache import omoide_cache
# A class where cache was added to a simulated long running method
class ExampleService :
@ omoide_cache ()
def time_consuming_method ( self , x : int ) -> int :
time . sleep ( 2.0 )
return x * x
service = ExampleService ()
# The first call will execute real logic and store the result in cache
service . time_consuming_method ( 1 )
# The second call will get results from cache
service . time_consuming_method ( 1 )Здесь мы добавляем кэш, который бросит элемент, наименьший часто доступ к тому, когда кэш становится слишком большим.
import time
from omoide_cache import omoide_cache , ExpireMode
class ExampleService :
@ omoide_cache ( max_allowed_size = 10 , size_expire_mode = ExpireMode . ACCESS_COUNT_BASED )
def time_consuming_method ( self , x : int ) -> int :
time . sleep ( 2.0 )
return x * x Здесь кэш автоматически удаляет элементы, которые были в последний раз доступны более 2 минут назад.
import time
from omoide_cache import omoide_cache
class ExampleService :
@ omoide_cache ( expire_by_access_duration_s = 120 )
def time_consuming_method ( self , x : int ) -> int :
time . sleep ( 2.0 )
return x * xВ качестве альтернативы мы можем удалить элементы, которые были рассчитаны более 2 минут назад.
import time
from omoide_cache import omoide_cache
class ExampleService :
@ omoide_cache ( expire_by_computed_duration_s = 120 )
def time_consuming_method ( self , x : int ) -> int :
time . sleep ( 2.0 )
return x * x Здесь кэш будет асинхронно обновлять элементы, которые были рассчитаны более 2 минут назад. Попытка обновлять будет выполняться каждые 10 секунд.
import time
from omoide_cache import omoide_cache , RefreshMode
class ExampleService :
@ omoide_cache ( refresh_duration_s = 120 , refresh_period_s = 10 , refresh_mode = RefreshMode . INDEPENDENT )
def time_consuming_method ( self , x : int ) -> int :
time . sleep ( 2.0 )
return x * x@omoide_cache() , но не @omoide_cache . Честно говоря, у меня нет никакого чертовски идеи, почему в декораторах есть это странное поведение, сделает все возможное, чтобы исправить его в будущих обновлениях.Если вы хотите проверить мою другую работу или связаться со мной: