Redis - In-Memory Data Store
Instagram, 2012. 30 מיליון users, 1 מיליארד photos. כל feed request היה צריך לחשב "מה התמונות של כולם שאני עוקב אחריהם, ממוין לפי זמן". SQL query על hundreds of millions of rows לכל request. הם הוסיפו Redis. ה-feeds מחושבים מראש ונשמרים ב-sorted sets. Cache hit: 0.5ms. Miss (first load): 100ms. ה-p99 ירד מ-2.5 שניות ל-80ms.
Pinterest משתמשת ב-Redis לrate limiting - 150 מיליון requests ביום, בדיקה אם user חצה limit ב-microseconds. Stripe משתמשת ב-Redis לidempotency keys - "האם ה-payment הזה כבר עובד?" ב-O(1).
Redis הוא In-Memory database שתומך ב-data structures מורכבות - לא רק strings. הוא הכלי שמופיע הכי הרבה בarchitecture של production systems גדולים, לא כי הוא "כי זה מה שעושים" אלא כי הוא ממש פותר בעיות שלא אפשר לפתור אחרת.
Salvatore Sanfilippo יצר את Redis ב-2009 כשניסה לבנות analytics system לstartup איטלקי. הוא מצא שMySQL מאוד איטי לdynamic leaderboards, אז כתב custom in-memory database עם sorted sets. הpublished כ-open source, נהיה viral תוך שבועות, ו-Redis כיום הוא אחד ה-databases הpopulariים ביותר בעולם.
ה-mental model הנכון לRedis הוא "super-fast, structured memory" ולא "database". כשמוסיפים Redis לarchitecture, שואלים "מה יכול לחיות ב-RAM ולהגיש בmicroseconds?" ולא "מה צריך persistence?". sessions, rate limits, cache, real-time counters - כל אלה מתאימים ל-RAM. data קריטי שאסור לאבד - PostgreSQL. ה-mistake הנפוץ היא לused Redis כ-primary database לdata קריטי ואז להיבהל כשrestart גורם לloss. Redis הוא supplement לPostgreSQL, לא replacement.
מה שמייחד את Redis מ-memcached (predecessor פופולרי): Redis הוא single-threaded (מ-ביצועי determinism עד version 6 שהוסיפה I/O threads), persistent (RDB + AOF), ותומך ב-rich data structures. single-threaded נשמע כחסרון אבל זה בעצם feature: אין race conditions ב-data structures, אין locks, ו-latency predictable. Redis 7 מריצה בbenchmarks מעל 1 מיליון operations לשנייה על single server.
Redis Cluster (הוסף ב-version 3 ב-2015) מאפשר horizontal sharding של Redis על כמה nodes. אבל: Redis Cluster מורכב לתפעל, ויש לו limitations - MGET/MSET חייבים להיות על keys שנמצאים באותו shard, כמה commands לא עובדים across-cluster. לרוב applications, single Redis instance עם 16-32GB RAM מספיק לשנים. Redis Sentinel (HA בלי sharding) הוא הconfiguration הנפוצה יותר: primary + replicas + sentinel processes שמבצעים automatic failover. Redis Cloud ו-AWS ElastiCache מנהלים את כל זה בשבילכם.