האץ את Bitrix עם Redis: מטמון, סשנים, תורים

למה Redis ולא Memcached? בפרויקט מסחר אלקטרוני עם קטלוג של 120,000 מוצרים ועומס שיא של 500 משתמשים בו-זמנית, Memcached נכשל בטיפול במטמון מתויג. פסילת תגים דרשה סריקה של כל המפתחות - עם יותר מ-50,000 מפתחות זה לקח 3-5 שניות, וחסם את יצירת הדפים. כל ייבוא מ-
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
האץ את Bitrix עם Redis: מטמון, סשנים, תורים
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1460
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    פיתוח אתר לחברת FIXPER
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    882
  • image_crm_dolbimby_434_0.webp
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1164

למה 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. תהליך:

  1. התקינו עותק משני ושלושה sentinels.
  2. הגדירו ניטור מאסטר.
  3. ב-Bitrix, השתמשו בספריית predis/predis—היא תומכת בחיבורי Sentinel.
  4. ב-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. בדקו מעבר: עצרו את המאסטר, חכו 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 עלייה במהירות טעינת הדפים. צרו קשר להערכת פרויקט—נבחר תצורה לעומס שלכם.