On this page
מערך שיעור: Redis ו-Cache-Aside
משך: 2 שעות אקדמיות (100 דקות).
מטרת השיעור: הסטודנטים יבינו למה Redis מהיר, ויישמו תבנית Cache-Aside אמיתית מעל DB קיים.
בסוף השיעור הסטודנטים צריכים: להסביר למה זיכרון מהיר מדיסק, לממש Cache-Aside עם Cache Hit/Miss, ולהסביר את הסיכון של קאש מיושן (Cache Invalidation).
דגש קריטי: מדידת זמן תגובה אמיתית (Cache Hit מול Miss) היא ההוכחה החיה הכי חזקה בשיעור הזה — הקדישו לה זמן.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה וחיבור | 5 דקות | שאלו: “מה יותר מהיר — לקרוא מ-RAM או מדיסק?” |
| הרעיון: Redis כמטמון בזיכרון | 15 דקות | הסבר קצר על ההבדל במהירות |
| הכנסת Redis לפרויקט (Setup) | 10 דקות | Docker → NuGet → רישום ב-Program.cs (DI, AddSingleton) → הזרקה לשירות |
| Data Types | 15 דקות | String/Hash/List/Set, דוגמאות קצרות |
| הרעיון: Cache-Aside | 20 דקות | בדיקה→Miss→שליפה+שמירה→Hit הבא |
| TTL | 10 דקות | מניעת קאש מיושן לצמיתות |
| הדגמה חיה: מדידת זמן | 20 דקות | Stopwatch, Hit מול Miss בפועל |
| תרגול מודרך | 5 דקות | תרגיל 1 |
דגשים להעברת השיעור
- השלב הכי נשכח: הרישום ב-Program.cs. סטודנטים נוטים לדלג ישר לקוד עם
ConnectionMultiplexer.Connectבכל מקום, בלי DI — הדגישו למהAddSingletonולא ליצור חיבור חדש בכל בקשה. - מדידת זמן תגובה אמיתית (עם
Task.Delayמלאכותי לדימוי DB “איטי”) היא הרגע החשוב ביותר — מספרים קונקרטיים (למשל “500ms → 2ms”) משכנעים בהרבה מהסבר תיאורטי. - הדגישו בתקיפות את סיכון ה-Cache Invalidation — עדכון DB בלי לעדכן/למחוק קאש הוא באג נפוץ ומסוכן בקוד production אמיתי.
- קשרו TTL ל-TTL Index ב-MongoDB מהשיעור הקודם — אותו רעיון בדיוק, כלי אחר.
מושגים
Cache — אחסון זמני של תוצאות מחושבות. Redis Data Types — String/Hash/List/Set. TTL — זמן חיים לערך בקאש. Cache-Aside Pattern — בדוק קאש→Miss→שלוף+שמור→Hit הבא.
תרגיל חשיבה
שאלת פתיחה: “עדכנתם מחיר מוצר ב-DB, אבל שכחתם למחוק את הערך המתאים ב-Redis. מה יראה משתמש שמבקש את המוצר הזה עכשיו — ולמה זה מסוכן במיוחד למחיר?”
מהלך: הובילו לתובנה: המשתמש יראה את המחיר הישן (מהקאש), לא העדכני — עד שה-TTL יפוג. עבור מחיר, זו לא רק אי-נוחות — זה עלול להיות נזק עסקי ממשי (מכירה במחיר שגוי). זו הדגמה מצוינת לכך ש-Cache Invalidation הוא לא “פרט טכני קטן” אלא חלק קריטי מהתכנון.
מה המרצה מראה בסוף: הריצו תרחיש מלא: שליפה ראשונה (Cache Miss, שומר בקאש) → עדכון “ידני” של הנתון ב-DB בלבד (בלי לגעת בקאש) → שליפה שנייה (Cache Hit — מציגה את הערך הישן, השגוי) → תיקון עם מחיקת מפתח הקאש בעדכון → שליפה שלישית (Miss מחדש, מציגה את הערך הנכון).