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}
classmethod calculate_ttl(content_type, context=None)[מקור]

חשב TTL בסיסי מוכוון קונטקסט.

מבטיח גבולות בטוחים: מינימום 60 שניות, מקסימום 7200 (שעתיים).

Return type:

int

פרמטרים:
class cache_manager.ActivityBasedTTL[מקור]

Bases: object

התאמת TTL לפי שעות פעילות (best-effort).

classmethod get_activity_multiplier()[מקור]
Return type:

float

classmethod adjust_ttl(base_ttl)[מקור]
Return type:

int

פרמטרים:

base_ttl (int)

cache_manager.build_cache_key(*parts)[מקור]

בניית מפתח cache יעיל ומובנה מהחלקים הנתונים.

  • מסנן חלקים ריקים

  • ממיר לתווים בטוחים (רווחים/סלאשים)

  • מגביל אורך ומוסיף hash קצר במידת הצורך

Return type:

str

פרמטרים:

parts (Any)

class cache_manager.CacheManager[מקור]

Bases: object

מנהל Cache מתקדם עם Redis

__init__()[מקור]
enable_debug_for(seconds)[מקור]

הפעל/הארך חלון דיבאג זמני ללוגים של HIT/MISS/SET.

  • אם seconds <= 0: מכבה דיבאג (debug_until=0)

  • אחרת: מאריך (לא מקצר) את החלון כך שיסתיים לפחות בעוד seconds שניות מהעכשיו

מחזיר את timestamp החדש של debug_until.

Return type:

float

פרמטרים:

seconds (int)

connect()[מקור]

התחברות ל-Redis

get(key)[מקור]

קבלת ערך מה-cache

Return type:

Optional[Any]

פרמטרים:

key (str)

set(key, value, expire_seconds=300)[מקור]

שמירת ערך ב-cache

Return type:

bool

פרמטרים:
set_dynamic(key, value, content_type, context=None)[מקור]

שמירה ב-cache עם TTL דינמי ותיעוד מינימלי במטריקות/לוגים.

Return type:

bool

פרמטרים:
get_with_refresh(key, refresh_func, *, content_type, context=None)[מקור]

קריאה מ-cache; אם חסר – מחשב, שומר דינמית ומחזיר.

Return type:

Any

פרמטרים:
delete(key)[מקור]

מחיקת ערך מה-cache

Return type:

bool

פרמטרים:

key (str)

delete_pattern(pattern)[מקור]

מחיקת כל המפתחות שמתאימים לתבנית

Return type:

int

פרמטרים:

pattern (str)

invalidate_user_cache(user_id)[מקור]

מחיקת כל ה-cache של משתמש ספציפי

Return type:

int

פרמטרים:

user_id (int)

clear_all()[מקור]

ניקוי כל המטמון באופן מבוקר.

  • אם Redis מושבת – מחזיר 0.

  • אם Redis פעיל – מוחק את כל המפתחות באמצעות SCAN+DEL (best-effort).

Return type:

int

ביטול קאש לפי קובץ: תוכן/רינדור/רשימות.

דפוסים נפוצים מעוגנים לאחור בהתאם למפתחות הקיימים בקוד.

Return type:

int

פרמטרים:
clear_stale(max_scan=1000, ttl_seconds_threshold=60)[מקור]

מחיקת מפתחות שכבר עומדים לפוג (”stale“) בצורה עדינה.

היגיון: - אם Redis מושבת – החזר 0. - סריקה מדורגת (SCAN) של עד max_scan מפתחות. - מחיקה רק למפתחות עם TTL חיובי קטן מ-ttl_seconds_threshold, או TTL שלילי המציין שאינו קיים. - לא מוחקים מפתחות ללא TTL (ttl == -1) כדי להימנע מפגיעה בקאש ארוך-חיים.

Return type:

int

פרמטרים:
  • max_scan (int)

  • ttl_seconds_threshold (int)

get_stats()[מקור]

סטטיסטיקות cache

Return type:

Dict[str, Any]

cache_manager.dynamic_cache(content_type, key_prefix=None)[מקור]

דקורטור ל-caching דינמי ל-Flask endpoints.

  • בונה מפתח קאש יציב הכולל משתמש/נתיב/פרמטרים

  • שומר רק טיפוסים serializable; עבור Response עם JSON שומר את ה-data בלבד

  • Fail-open: לעולם לא מפיל endpoint על בעיות קאש

Return type:

Callable[[Callable[[ParamSpec(P)], TypeVar(R)]], Callable[[ParamSpec(P)], TypeVar(R)]]

פרמטרים:
  • content_type (str)

  • key_prefix (str | None)

cache_manager.cached(expire_seconds=300, key_prefix='default')[מקור]

דקורטור לcaching פונקציות

פרמטרים:
  • expire_seconds (int)

  • key_prefix (str)

cache_manager.async_cached(expire_seconds=300, key_prefix='default')[מקור]

דקורטור לcaching פונקציות async

פרמטרים:
  • expire_seconds (int)

  • key_prefix (str)