cache_manager module
מנהל Cache מתקדם עם Redis Advanced Cache Manager with Redis
- class cache_manager.DynamicTTL[מקור]
Bases:
objectניהול TTL דינמי לפי סוג תוכן וקונטקסט.
הערכים כאן מייצגים TTL בסיסי בשניות עבור סוגי תוכן שכיחים.
-
BASE_TTL:
Dict[str,int] = {'bookmarks': 120, 'collections_detail': 30, 'collections_items': 180, 'collections_list': 60, 'file_content': 3600, 'file_list': 300, 'markdown_render': 1800, 'public_stats': 600, 'search_results': 180, 'settings': 60, 'sticky_summary': 60, 'tags': 300, 'user_stats': 600}
-
BASE_TTL:
- cache_manager.build_cache_key(*parts)[מקור]
בניית מפתח cache יעיל ומובנה מהחלקים הנתונים.
מסנן חלקים ריקים
ממיר לתווים בטוחים (רווחים/סלאשים)
מגביל אורך ומוסיף hash קצר במידת הצורך
- class cache_manager.CacheManager[מקור]
Bases:
objectמנהל Cache מתקדם עם Redis
- enable_debug_for(seconds)[מקור]
הפעל/הארך חלון דיבאג זמני ללוגים של HIT/MISS/SET.
אם seconds <= 0: מכבה דיבאג (debug_until=0)
אחרת: מאריך (לא מקצר) את החלון כך שיסתיים לפחות בעוד seconds שניות מהעכשיו
מחזיר את timestamp החדש של debug_until.
- set_dynamic(key, value, content_type, context=None)[מקור]
שמירה ב-cache עם TTL דינמי ותיעוד מינימלי במטריקות/לוגים.
- get_with_refresh(key, refresh_func, *, content_type, context=None)[מקור]
קריאה מ-cache; אם חסר – מחשב, שומר דינמית ומחזיר.
- clear_all()[מקור]
ניקוי כל המטמון באופן מבוקר.
אם Redis מושבת – מחזיר 0.
אם Redis פעיל – מוחק את כל המפתחות באמצעות SCAN+DEL (best-effort).
- Return type:
ביטול קאש לפי קובץ: תוכן/רינדור/רשימות.
דפוסים נפוצים מעוגנים לאחור בהתאם למפתחות הקיימים בקוד.
- clear_stale(max_scan=1000, ttl_seconds_threshold=60)[מקור]
מחיקת מפתחות שכבר עומדים לפוג (”stale“) בצורה עדינה.
היגיון: - אם Redis מושבת – החזר 0. - סריקה מדורגת (SCAN) של עד max_scan מפתחות. - מחיקה רק למפתחות עם TTL חיובי קטן מ-ttl_seconds_threshold, או TTL שלילי המציין שאינו קיים. - לא מוחקים מפתחות ללא TTL (ttl == -1) כדי להימנע מפגיעה בקאש ארוך-חיים.
- cache_manager.dynamic_cache(content_type, key_prefix=None)[מקור]
דקורטור ל-caching דינמי ל-Flask endpoints.
בונה מפתח קאש יציב הכולל משתמש/נתיב/פרמטרים
שומר רק טיפוסים serializable; עבור Response עם JSON שומר את ה-data בלבד
Fail-open: לעולם לא מפיל endpoint על בעיות קאש