לדלג לתוכן

1.5 רדיס הרצאה

Redis – מסד נתונים בזיכרון (In-Memory Data Store)

הקדמה

רדיס- Redis הוא מסד נתונים מהיר במיוחד שעובד בזיכרון (RAM).
בניגוד ל-MySQL או MongoDB, Redis לא מיועד להיות מקור האמת הראשי של הדאטה, אלא כלי עזר שמטרתו:

  • ביצועים
  • הורדת עומס ממסדי נתונים אחרים
  • עבודה עם נתונים זמניים
    Redis נפוץ מאוד כמעט בכל מערכת אמיתית:
  • אתרי תוכן
  • מערכות מסחר
  • מערכות בזמן אמת

למה צריך Redis?

נניח שיש לנו מערכת טיולים:

  • כל בקשה ל־GET /trips/{id} פונה ל־DB

  • מאות משתמשים מבקשים את אותו טיול

  • המסד נהיה צוואר בקבוק

במקום לפנות ל־DB כל פעם:

  • שומרים את התוצאה ב־Redis

  • בקשות חוזרות נשלפות מהזיכרון

התוצאה:

  • פי עשרות ומהירות גבוהה יותר

  • פחות עומס על MySQL / MongoDB


Redis ≠ Database רגיל

Redis הוא:

  • In-Memory

  • Key-Value

  • NoSQL

אבל עם יכולות מתקדמות:

  • TTL (זמן חיים)

  • Atomic operations

  • מבני נתונים מתקדמים

  • Pub/Sub

  • Counters

  • Rate limiting


מבני נתונים ב־Redis

String

המבנה הבסיסי ביותר:

key: trip:123
value: "{ 'name': 'eilat fun', 'people': 3 }"

שימושים:

  • Cache

  • Tokens

  • JSON serialized


Hash

אובייקט עם שדות:

trip:123:name -> "eilat fun"
trip:123:people -> 3

או:

HSET trip:123 name "eilat fun" people 3

שימושים:

  • אובייקטים פשוטים

  • User profiles

  • Settings


List

רשימה מסודרת:

LPUSH recent_trips trip1
LPUSH recent_trips trip2

שימושים:

  • Activity feed

  • History

  • Queues פשוטים


Set

אוסף ללא כפילויות:

SADD trip:123:hotels Hilton Dan

שימושים:

  • Tags

  • Relations פשוטים

  • מניעת כפילויות


Sorted Set

כמו Set, אבל עם ציון:

ZADD popular_trips 150 trip1

שימושים:

  • דירוגים

  • Leaderboards

  • סטטיסטיקות


Redis כ־Cache

עקרון העבודה

  1. בקשה מגיעה לשרת

  2. מחפשים את הנתון ב־Redis

  3. אם קיים → מחזירים

  4. אם לא → פונים ל־DB, שומרים ב־Redis ומחזירים


דוגמה – Cache לטיול

trip = redis.get("trip:123")
if not trip:
    trip = db.get_trip(123)
    redis.setex("trip:123", 60, serialize(trip))
return trip
  • setex מגדיר TTL

  • הנתון יימחק אוטומטית אחרי 60 שניות


TTL – Time To Live

Redis יודע למחוק נתונים לבד.

SET session:abc123 user42 EX 3600

שימושים:

  • Sessions

  • OTP

  • Tokens

  • Cache זמני


Counters ו־Atomic Operations

Redis תומך בפעולות אטומיות:

INCR login_attempts:user42

שימושים:

  • ספירת כניסות

  • Rate limiting

  • סטטיסטיקות


Rate Limiting עם Redis

דוגמה:

  • מקסימום 100 בקשות בדקה למשתמש
INCR user:42:requests
EXPIRE user:42:requests 60

אם הערך > 100 → חוסמים.


Pub / Sub (Messaging)

Redis מאפשר שליחת הודעות בזמן אמת.

SUBSCRIBE trip_updates
PUBLISH trip_updates "trip 123 updated"

שימושים:

  • Notifications

  • Chat

  • עדכונים בזמן אמת


Redis בפרודקשן

דברים חשובים:

  • Redis לא מחליף DB

  • לא לשמור דאטה קריטי בלבד ב־Redis

  • תמיד להגדיר TTL

  • Redis יכול להתרוקן (Restart)

ברוב המערכות:

  • SQL / Mongo = Source of Truth

  • Redis = Cache / Performance Layer


חיבור Redis בפייתון

הרצה ב־Docker:

docker run --name redis-test -p 6379:6379 -d redis:latest

חיבור בפייתון:

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)

נסו לקרוא בעצמכם על שימוש של רדיס בפייתון!


Redis במערכת TRIP

שימושים אפשריים:

  • Cache לטיולים

  • Cache לרשימות פופולריות

  • Counter של צפיות בטיול

  • Session management

  • Rate limit ל־API


השוואה: SQL / Mongo / Redis

מערכת תפקיד
MySQL / Postgres נתונים עסקיים, קשרים
MongoDB נתונים גמישים, JSON
Redis ביצועים, Cache, זמן אמת

סיכום

  • Redis הוא כלי קריטי למערכות אמיתיות

  • עובד בזיכרון → מהיר מאוד

  • לא מחליף DB רגיל

  • מושלם ל־Cache, Counters ו־Rate Limiting

  • תכנון נכון חוסך כסף וביצועים

  • אם Redis נופל- המערכת צריכה להמשיך לעבוד, רק לאט יותר.