التخزين المؤقت لم يعد بحاجة إلى أن يكون صعبًا بعد الآن. مع وجود بضعة أسطر من Code Omoide ذاكرة التخزين المؤقت ستجلب على الفور خدمات Python إلى المستوى التالي!
مكتبة تم إصدارها : PYPI
رمز المصدر : جيثب
البرنامج التعليمي №1 : مدونتي أو وسيط
هذا هو حل ذاكرة التخزين المؤقت في الذاكرة القوية ، قابلة للضبط للغاية وسهل الاندماج في الذاكرة المكتوبة في 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 هنا ستقوم ذاكرة التخزين المؤقت تلقائيًا بإزالة العناصر التي تم الوصول إليها تلقائيًا منذ أكثر من دقيقتين.
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بدلاً من ذلك ، يمكننا إزالة العناصر التي تم حسابها منذ أكثر من دقيقتين.
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 هنا ستعمل ذاكرة التخزين المؤقت على تحديث العناصر التي تم حسابها منذ أكثر من دقيقتين. سيتم تنفيذ محاولة التحديث كل 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 بصراحة ليس لدي أي فكرة سخيف لماذا يوجد هذا السلوك الغريب في الديكور ، بذل قصارى جهدي لإصلاحه في التحديثات المستقبلية.في حال كنت ترغب في التحقق من عملي الآخر أو الاتصال بي: