למה Redis ולא Memcached?
בפרויקט מסחר אלקטרוני עם קטלוג של 120,000 מוצרים ועומס שיא של 500 משתמשים בו-זמנית, Memcached נכשל בטיפול בקאש מתויג. פסילת תגים דרשה סריקה של כל המפתחות—עם יותר מ-50,000 מפתחות זה לקח 3–5 שניות, וחסם את יצירת הדפים. כל ייבוא מ-1C הפך לזמן השבתה של האתר. לפי ויקיפדיה, Redis משתמש במבני Set טבעיים: כל תג מאחסן קבוצת מפתחות, פסילה היא פעולה אטומית של SMEMBERS + DEL שלוקחת מילישניות. העברנו את הקאש ל-Redis, וזמן הניקוי ירד ל-50 אלפיות השנייה, מה שהאיץ את מהירות טעינת דפי הקטלוג ב-40%. מעבר לקאש, Redis משמש לסשנים, תורי תהליכים עסקיים ו-pub/sub ב-Bitrix24 המקומי. קבלו ייעוץ לכיוונון Redis לפרויקט שלכם—נבחר את התצורה האופטימלית.
התקנה ותצורה בסיסית
התקינו חבילות:
apt install redis-server php-redis הגדירו את apt install redis-server php-redis עבור Bitrix:
# Сетевой доступ bind 127.0.0.1 port 6379 protected-mode yes # Память maxmemory 2gb maxmemory-policy allkeys-lru # Персистентность (для кэша можно отключить) save "" # отключаем RDB snapshot appendonly no # отключаем AOF # Для сессий — включаем персистентность # save 900 1 # appendonly yes # Производительность tcp-backlog 511 tcp-keepalive 300 hz 20 # Логирование loglevel notice logfile /var/log/redis/redis-server.log /etc/redis/redis.conf — מסיר מפתחות בשימוש הפחות אחרון כשמגיעים למגבלה. מדיניות נכונה לקאש. לסשנים השתמשו ב-# Сетевой доступ bind 127.0.0.1 port 6379 protected-mode yes # Память maxmemory 2gb maxmemory-policy allkeys-lru # Персистентность (для кэша можно отключить) save "" # отключаем RDB snapshot appendonly no # отключаем AOF # Для сессий — включаем персистентность # save 900 1 # appendonly yes # Производительность tcp-backlog 511 tcp-keepalive 300 hz 20 # Логирование loglevel notice logfile /var/log/redis/redis-server.log : עדיף לקבל שגיאה מאשר לאבד סשן משתמש. השביתו שמירה מתמשכת לקאש—אין טעם לכתוב לדיסק מה שייפסל בכל מקרה.
חיבור ל-Bitrix
דרך מודול maxmemory-policy allkeys-lru או ישירות ב-noeviction:
// /bitrix/.settings.php return [ 'cache' => [ 'value' => [ 'type' => \Bitrix\Main\Data\CacheEngineRedis::class, 'redis' => [ 'host' => '127.0.0.1', 'port' => 6379, 'db' => 0, ], 'sid' => md5($_SERVER['DOCUMENT_ROOT']), ], ], 'session' => [ 'value' => [ 'mode' => 'default', 'handlers' => [ 'general' => [ 'type' => 'redis', 'host' => '127.0.0.1', 'port' => 6379, 'db' => 1, // отдельная БД от кэша ], ], ], ], ]; הפרידו קאש (db:0) וסשנים (db:1)—מדיניות פינוי שונה, ניטור נפרד.
השוואה: Memcached מול Redis עבור Bitrix
| פרמטר | Memcached | Redis |
|---|---|---|
| סוגי נתונים | מחרוזות בלבד | מחרוזות, רשימות, קבוצות, האשים |
| פסילת תגים | סריקת כל המפתחות (O(N)) | אטומי דרך Set (O(1)) |
| שמירה מתמשכת | לא | אופציונלי (RDB/AOF) |
| תורים | לא | List, Pub/Sub, Stream |
| סשנים | ספריות צד שלישי | תמיכה מובנית |
| זמינות גבוהה | איזון עומסים בצד הלקוח | Sentinel/Cluster |
Redis מנצח בזכות מבנים טבעיים וגמישות. עבור Bitrix, זו הבחירה היחידה לקאש מתויג בקטלוגים גדולים.
Redis Sentinel לזמינות גבוהה
שרת Redis יחיד הוא נקודת כשל יחידה. Redis Sentinel מספק מעבר אוטומטי:
redis-master (10.0.0.10:6379) redis-replica (10.0.0.11:6379) sentinel-1, sentinel-2, sentinel-3 (порт 26379) sprint.migration:
sentinel monitor bitrix-master 10.0.0.10 6379 2 sentinel down-after-milliseconds bitrix-master 5000 sentinel failover-timeout bitrix-master 10000 sentinel parallel-syncs bitrix-master 1 קוורום .settings.php—אם המאסטר אינו זמין, שניים מתוך שלושה sentinels חייבים להסכים על מעבר. Bitrix מתחבר ל-Sentinel, לא ישירות למאסטר—דורש מחלקת קאש מותאמת או שימוש ב-Predis עם תמיכת Sentinel.
איך לנטר Redis בסביבת ייצור?
redis-cli info stats | grep -E "keyspace_hits|keyspace_misses|evicted_keys|connected_clients" redis-cli info memory | grep -E "used_memory_human|maxmemory_human|mem_fragmentation_ratio" redis-cli --bigkeys // /bitrix/.settings.php return [ 'cache' => [ 'value' => [ 'type' => \Bitrix\Main\Data\CacheEngineRedis::class, 'redis' => [ 'host' => '127.0.0.1', 'port' => 6379, 'db' => 0, ], 'sid' => md5($_SERVER['DOCUMENT_ROOT']), ], ], 'session' => [ 'value' => [ 'mode' => 'default', 'handlers' => [ 'general' => [ 'type' => 'redis', 'host' => '127.0.0.1', 'port' => 6379, 'db' => 1, // отдельная БД от кэша ], ], ], ], ]; — פרגמנטציית זיכרון חמורה. הריצו redis-master (10.0.0.10:6379) redis-replica (10.0.0.11:6379) sentinel-1, sentinel-2, sentinel-3 (порт 26379) או אתחלו את Redis במהלך תחזוקה. אם sentinel.conf גדל — sentinel monitor bitrix-master 10.0.0.10 6379 2 sentinel down-after-milliseconds bitrix-master 5000 sentinel failover-timeout bitrix-master 10000 sentinel parallel-syncs bitrix-master 1 נמוך מדי. הגדילו אותו או נתחו מה צורך זיכרון. שאפו למדדים: אם 2 עולה על 5% מהפניות, שקלו מחדש את מדיניות הפינוי.
הגדרת תורי Redis עבור B24
לגרסה המקומית של Bitrix24, השתמשו ב-Redis כבסיס לתורי הודעות push ואירועים בזמן אמת. הפעילו את שרת ה-push והגדירו את סוג התור דרך API:
\Bitrix\Pull\Common::ConfigSet(['push' => ['queue' => 'redis']]); CPullOptions::SetQueueServerType('redis'); CPullOptions::SetRedisConfig([ 'host' => '127.0.0.1', 'port' => 6379, 'db' => 2, ]); לאחר מכן, כל האירועים עוברים דרך Redis—השהייה יורדת ב-30% בהשוואה ל-MySQL.
איך להקים Redis סובלני לתקלות עם Sentinel?
לפרויקטים בעומס גבוה, אנו פורסים אשכול Sentinel. תהליך:
- התקינו עותק משני ושלושה sentinels.
- הגדירו ניטור מאסטר.
- ב-Bitrix, השתמשו בספריית predis/predis—היא תומכת בחיבורי Sentinel.
- ב-
redis-cli info stats | grep -E "keyspace_hits|keyspace_misses|evicted_keys|connected_clients" redis-cli info memory | grep -E "used_memory_human|maxmemory_human|mem_fragmentation_ratio" redis-cli --bigkeys, ציינו את נקודת החיבור ל-Sentinel. - בדקו מעבר: עצרו את המאסטר, חכו 5 שניות, וודאו שהעותק המשני הופך למאסטר.
כך מושגת זמינות של 99.9% לקאש וסשנים ללא אובדן נתונים בזמן כשל שרת.
מדיניות פינוי: איזו למה?
| מדיניות | התנהגות | מקרה שימוש |
|---|---|---|
| allkeys-lru | מסיר מפתחות LRU | קאש בלוקי מידע |
| volatile-lru | מסיר LRU בין מפתחות עם TTL | קאש עם זמן חיים מוגבל |
| allkeys-random | הסרה אקראית | לעיתים רחוקות |
| noeviction | מחזיר שגיאה במגבלה | סשנים |
מה כלול בעבודה
אנו מספקים התקנת Redis סוהר:
- ביקורת של תצורת הקאש והסשנים הנוכחית.
- התקנה ואופטימיזציה של Redis על השרת.
- אינטגרציה עם Bitrix דרך
mem_fragmentation_ratio > 1.5. - הגדרת Sentinel אם נדרש.
- ניטור והתראות (מדדים, לוחות מחוונים).
- תיעוד תפעולי.
- הדרכת צוות על פעולות בסיסיות.
- תמיכה למשך שבועיים לאחר היישום.
יש לנו ניסיון של למעלה מ-5 שנים עם Bitrix ו-Redis, וביצענו 50+ פרויקטים של האצת אתרים. אנו מבטיחים לפחות פי 2 עלייה במהירות טעינת הדפים. צרו קשר להערכת פרויקט—נבחר תצורה לעומס שלכם.







