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

כאשר מנגנוני מטמון סטנדרטיים כבר לא עומדים בעומס, אתר Bitrix מתחיל להאט, וייבוא מ-1C משתק את הפעילות. אנו מגדירים את Redis עבור מטמון, סשנים ותורים כדי לזרז את יצירת הדפים ולהקל על השרת. הצוות שלנו מספק את הפרויקט במפתח מלא—מבדיקת התצורה הנוכחית ועד ליישום ותמיכה שוטפת, תוך הבטחת ביצועים יציבים גם בשעות השיא.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
האץ את Bitrix עם Redis: מטמון, סשנים, תורים
פשוט
~1 יום

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

שאלות נפוצות

למה 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 עלייה במהירות טעינת הדפים. צרו קשר להערכת פרויקט—נבחר תצורה לעומס שלכם.