1.5 רדיס תרגול
תרגול: הוספת Redis למערכת TRIP (Cache, Counters ו-Rate Limiting)¶
1. חיבור Redis למערכת¶
-
הריצו Redis מקומית (Docker).
-
הוסיפו חיבור Redis לפרויקט ה-FastAPI שלכם.
-
ודאו שניתן:
-
לשמור מפתח
-
לקרוא מפתח
-
למחוק מפתח
-
2. Cache ל־GET Trip¶
-
מימשו Cache ל־endpoint:
-
הלוגיקה צריכה להיות:
-
בדיקה אם הטיול קיים ב־Redis
-
אם כן – החזרה מ־Redis
-
אם לא – שליפה מה-DB (MongoDB / SQL)
-
שמירה ב־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 יחד
-