Caching muss nicht mehr hart sein. Mit nur wenigen Zeilen von Code Omoide Cache bringt Ihre Python -Dienste sofort auf die nächste Stufe!
Veröffentlichte Bibliothek : PYPI
Quellcode : GitHub
Tutorial №1 : Mein Blog oder Medium
Dies ist eine robuste, hoch einstellbare und einfach zu integrierte Integration in Memory-Cache-Lösung, die in reinem Python geschrieben wurde, ohne Abhängigkeiten.
Es ist so konzipiert, dass es sich um einen Methodenebene -Cache handelt, der sich um eine einzelne Klassenmethode wickelt, mithilfe von Methoden -Aufruf -Argumenten als Cache -Taste und des Speicherns des Rückgabewerts verwendet wird.
Anpassbar für Ihren spezifischen Anwendungsfall bietet verschiedene Ablauf- und Aktualisierungsoptionen.
Sehr benutzerfreundlich, super einfach zu integrieren in einen einfachen Dekorateur (dh Annotation für diejenigen, die aus Java kommen), müssen Sie Ihren Code nicht kompliziertes Logik hinzufügen. Verwenden Sie einfach @omoide_cache() zusätzlich zu jeder Methode in Ihren Diensten. Es wird automatisch einen Cache für Ihre Methode mit Standardeinstellungen generieren. Sie können diese Einstellungen weiter über die Dekorationsparameter einstellen.
Faire Warnung - Dieses Projekt befindet sich in der frühesten Phase seines Lebenszyklus, es wird in Zukunft viele Verbesserungs- und Fehlerbehebungen geben. Alle Vorschläge und Fehlerberichte sind sehr willkommen!
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 )Hier fügen wir einen Cache hinzu, der einen Element fallen lässt, der am wenigsten zugegriffen wird, wenn der Cache zu groß wird.
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 Hier entfernen der Cache automatisch Artikel, auf die zuletzt vor mehr als 2 Minuten zugegriffen wurde.
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 * xAlternativ können wir Elemente entfernen, die vor mehr als 2 Minuten berechnet wurden.
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 Hier wird der Cache asynchron auf Elemente aktualisiert, die vor mehr als 2 Minuten berechnet wurden. Der Versuch zur Aktualisierung wird alle 10 Sekunden durchgeführt.
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() , jedoch nicht @omoide_cache . Ich habe ehrlich gesagt keine verdammte Idee, warum es dieses seltsame Verhalten in Dekoratoren gibt, werde mein Bestes tun, um es in zukünftigen Updates zu beheben.Falls Sie meine andere Arbeit überprüfen oder mich kontaktieren möchten: