לדלג לתוכן

1.5 רדיס תרגול

תרגול: הוספת Redis למערכת TRIP (Cache, Counters ו-Rate Limiting)

1. חיבור Redis למערכת

  • הריצו Redis מקומית (Docker).

  • הוסיפו חיבור Redis לפרויקט ה-FastAPI שלכם.

  • ודאו שניתן:

    • לשמור מפתח

    • לקרוא מפתח

    • למחוק מפתח

2. Cache ל־GET Trip

  • מימשו Cache ל־endpoint:

    GET /trips/{trip_id}
    
  • הלוגיקה צריכה להיות:

    1. בדיקה אם הטיול קיים ב־Redis

    2. אם כן – החזרה מ־Redis

    3. אם לא – שליפה מה-DB (MongoDB / SQL)

    4. שמירה ב־Redis עם TTL

  • בחרו TTL הגיוני והסבירו למה.


3. Invalidation של Cache

  • מימשו ניקוי Cache כאשר:

    • טיול מתעדכן

    • טיול נמחק

  • ודאו שאין החזרה של נתונים ישנים.


4. ספירת צפיות בטיול (Counters)

  • מימשו מונה צפיות לכל טיול:

    • כל קריאה ל־GET /trips/{trip_id} מגדילה מונה ב־Redis
  • הוסיפו endpoint שמחזיר:

    • מספר צפיות לטיול מסוים

5. דירוג טיולים פופולריים

  • שמרו את כמות הצפיות ב־Sorted Set.

  • מימשו endpoint שמחזיר:

    • 10 הטיולים הנצפים ביותר

6. Rate Limiting ל־API

  • הגבילו משתמש ל־X בקשות בדקה ל־API:

    • לפי IP

    • או לפי user_id

  • החזירו שגיאה מתאימה במקרה של חריגה.


7. Redis כ־Session Store (אופציונלי)

  • שמרו Session של משתמש ב־Redis עם TTL.

  • ודאו שה-Session נמחק אוטומטית לאחר זמן.


8. FastAPI + Dependencies

  • עטפו את Redis כ־Dependency של FastAPI.

  • ודאו שכל ה־controllers משתמשים באותו חיבור.


9. דוקומנטציה / Swagger

  • בדקו שכל ה־endpoints:

    • מתועדים ב־/docs

    • כוללים תגובות שגיאה רלוונטיות (429, 404)


10. חשיבה ארכיטקטונית (ללא קוד)

  • הסבירו:

    • מתי Redis הוא Cache בלבד ומתי Source of Truth

    • למה Cache Invalidation היא בעיה קשה

    • איזה נתונים אסור לשמור רק ב־Redis

    • איך Redis משתלב עם SQL ו-MongoDB יחד