El almacenamiento en caché ya no necesita ser difícil. ¡Con solo unas pocas líneas de código, Omoide Cache llevará instantáneamente sus servicios de Python al siguiente nivel!
Biblioteca lanzada : Pypi
Código fuente : GitHub
Tutorial №1 : mi blog o medio
Esta es una solución robusta, altamente sintonizable y fácil de integrar en la memoria en la memoria escrita en Python puro, sin dependencias.
Está diseñado para ser un caché de nivel de método, envolviendo un método de clase única, utilizando argumentos de llamadas de método como clave de caché y almacenar su valor de retorno.
Personalizable para adaptarse a su caso de uso específico, proporciona varias opciones de vencimiento y actualización.
Muy fácil de usar, súper fácil de integrar con un decorador simple (es decir, anotación, para aquellos que provienen de Java), no es necesario agregar una lógica complicada a su código, solo use @omoide_cache() además de cualquier método de sus servicios. Generará automáticamente un caché para su método con la configuración predeterminada. Puede ajustar aún más estas configuraciones a través de los parámetros del decorador.
Advertencia justa: este proyecto se encuentra en la etapa más temprana de su ciclo de vida, habrá muchas mejoras y correcciones de errores en el futuro. ¡Todas las sugerencias e informes de errores son muy bienvenidos!
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 )Aquí agregamos un caché que dejará caer un elemento con menos frecuencia cuando el caché se vuelve demasiado grande.
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 Aquí el caché eliminará automáticamente los elementos que se accedieron por última vez hace más de 2 minutos.
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 * xAlternativamente, podemos eliminar los elementos que se calcularon hace más de 2 minutos.
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 Aquí el caché actualizará asincrónicamente elementos que se calcularon hace más de 2 minutos. El intento de actualizar se realizará cada 10 segundos.
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() , pero no @omoide_cache . Sinceramente, no tengo una maldita idea de por qué existe este extraño comportamiento en los decoradores, haré todo lo posible para solucionarlo en futuras actualizaciones.En caso de que desee verificar mi otro trabajo o contactarme: