פיתוח מודול מטמון עבור 1C-Bitrix על Redis

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

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

שאלות נפוצות

כאשר האתר שלך מבוסס Bitrix מאט, תיקיית /bitrix/cache/ תופחת ל-40GB, ומסד הנתונים ננעל תחת עומס, מטמון הקבצים הסטנדרטי כבר לא רלוונטי. מודול מטמון מבוסס Redis פותר את הבעיות הללו ישירות. בפרויקט אחד עם קטלוג של 500,000 פריטים, מטמון הקבצים גדל ל-40GB, ופעולות קריאה חסמו את מסד הנתונים. מעבר ל-Redis השיג שיעור פגיעה של 98%, הפחית את זמן ההשהיה ב-90%, ואיפשר ביטול תגיות אטומי. עם ניסיון של למעלה מ-10 שנים בפיתוח Bitrix ו-40+ פרויקטים דומים, אנו מתכננים פתרונות מטמון חזקים המותאמים לארכיטקטורה שלך. צור קשר לניתוח והצעה סופית.

למה Redis עדיף על מטמון קבצים

מטמון קבצים אינו ניתן להרחבה על פני מספר שרתים, פעולות קריאה/כתיבה נעולות ברמת מערכת הקבצים, וביטול תגיות הוא פעולה חוסמת. Redis מבצע שאילתות בזיכרון, עם זמן תגובה נמוך ב-90%. פעולות אטומיות (Sets, Lists) הופכות את הביטול למיידי. בפועל, מודול Redis משיג שיעור פגיעה של 98%, בעוד שמטמון קבצים rarely עולה על 85%. בדיקת עומס עם 1,000 בקשות במקביל הראתה ש-Redis טיפל בכל הבקשות ב-120 אלפיות השנייה לעומת 450 אלפיות השנייה עבור מטמון קבצים.

ארכיטקטורת CacheManager

המחלקה המרכזית CacheManager מיישמת את תבנית האסטרטגיה. ה-backend נבחר בהגדרות המודול:

$cache = \Vendor\Cache\CacheManager::getInstance();

// Стандартный get-or-set
$result = $cache->remember('catalog_section_12', 3600, function() {
    return CIBlockSection::GetList(/* ... */)->Fetch();
}, ['iblock_12', 'catalog']);

// → Данные из кеша или результат callable, если промах

// Явная инвалидация по тегу
$cache->invalidateTag('iblock_12');
// → Сбрасываются все ключи, помеченные тегом iblock_12

Redis backend: ביטול תגיות אטומי

תגיות מיושמות באמצעות Redis Sets. הביטול הוא אטומי ללא נעילות מערכת קבצים:

class RedisCacheBackend implements CacheBackendInterface {
    private \Redis $redis;

    public function get(string $key): mixed {
        $data = $this->redis->get($key);
        return $data !== false ? unserialize($data) : null;
    }

    public function set(string $key, mixed $value, int $ttl, array $tags = []): void {
        $serialized = serialize($value);
        $this->redis->setEx($key, $ttl, $serialized);

        // Теги хранятся как Redis Sets
        foreach ($tags as $tag) {
            $this->redis->sAdd("tag:{$tag}", $key);
            $this->redis->expire("tag:{$tag}", $ttl + 3600);
        }
    }

    public function invalidateTag(string $tag): void {
        $keys = $this->redis->sMembers("tag:{$tag}");
        if ($keys) {
            $this->redis->del(...$keys);
        }
        $this->redis->del("tag:{$tag}");
    }
}

ארבע אסטרטגיות מטמון

אנו מיישמים ארבע אסטרטגיות בהתאם לסוג הנתונים:

  • מטמון TTL — זמן חיים קלאסי לנתונים שמשתנים לעיתים רחוקות: הגדרות אתר, אזורים, משלוח.
  • ביטול אירועים — איפוס על אירועי Bitrix ($cache = \Vendor\Cache\CacheManager::getInstance(); // Стандартный get-or-set $result = $cache->remember('catalog_section_12', 3600, function() { return CIBlockSection::GetList(/* ... */)->Fetch(); }, ['iblock_12', 'catalog']); // → Данные из кеша или результат callable, если промах // Явная инвалидация по тегу $cache->invalidateTag('iblock_12'); // → Сбрасываются все ключи, помеченные тегом iblock_12 , class RedisCacheBackend implements CacheBackendInterface { private \Redis $redis; public function get(string $key): mixed { $data = $this->redis->get($key); return $data !== false ? unserialize($data) : null; } public function set(string $key, mixed $value, int $ttl, array $tags = []): void { $serialized = serialize($value); $this->redis->setEx($key, $ttl, $serialized); // Теги хранятся как Redis Sets foreach ($tags as $tag) { $this->redis->sAdd("tag:{$tag}", $key); $this->redis->expire("tag:{$tag}", $ttl + 3600); } } public function invalidateTag(string $tag): void { $keys = $this->redis->sMembers("tag:{$tag}"); if ($keys) { $this->redis->del(...$keys); } $this->redis->del("tag:{$tag}"); } } וכו').
  • Stale-while-revalidate — הגשת מטמון מיושן מיידית, הפעלת התחדשות ברקע באמצעות סוכן. מבטל את בעיית העדר על פגיעה.
  • בהיקף בקשה — מערך בזיכרון לבקשת HTTP אחת, הימנעות משאילתות DB חוזרות.

רוצה לקבוע את האסטרטגיה האופטימלית לפרויקט שלך? צור קשר לייעוץ.

חימום מטמון למניעת קפיצות

לאחר ריקון מטמון, הבקשה הראשונה פוגעת במסד הנתונים. תחת עומס גבוה, זה גורם לקפיצה. סוכן חימום פותר זאת:

// Зарегистрированные warmup-задачи
$cache->registerWarmup('catalog_menu', function() {
    return CIBlockElement::GetList(/* полный каталог */);
}, ['iblock_main_catalog'], 7200);

// Агент запускается раз в час и обновляет кеш до истечения TTL
\Vendor\Cache\WarmupAgent::run();

ניטור וסטטיסטיקות

טבלת OnAfterIBlockElementAdd מאחסנת סטטיסטיקות מצטברות לכל מפתח:

  • OnAfterIBlockElementUpdate, // Зарегистрированные warmup-задачи $cache->registerWarmup('catalog_menu', function() { return CIBlockElement::GetList(/* полный каталог */); }, ['iblock_main_catalog'], 7200); // Агент запускается раз в час и обновляет кеш до истечения TTL \Vendor\Cache\WarmupAgent::run(); , b_vendor_cache_stat, key_prefix, hits

ממשק הניהול כולל:

  • שיעור פגיעה לפי קטגוריית מפתח
  • מפתחות "קרים" מובילים (>20% החטאות)
  • גודל מטמון לכל backend
  • ביטול ידני לפי תגית או מפתח
  • יומן פעולות ביטול אחרונות

איך לשלב עם רכיבים קיימים?

רכיבים סטנדרטיים משתמשים ב-misses עם פרמטר avg_ttl. המודול מיירט מנגנון זה ומפנה ל-Redis:

// В init.php после подключения модуля
\Vendor\Cache\BitrixCacheBridge::install();
// → Переопределяет \Bitrix\Main\Data\Cache::createInstance()
// возвращая Redis-бэкенд вместо файлового

הגשר הופך את ההחלפה לשקופה—רכיבים ממשיכים לעבוד ללא שינויי קוד.

תהליך: מבדיקה ועד פריסה

  1. ניתוח — לימוד הארכיטקטורה הנוכחית, מדידת ביצועים (XDebug, יומן איטי של MySQL), זיהוי צווארי בקבוק.
  2. עיצוב — עיצוב סכמת המודול: בחירת אסטרטגיות, עיצוב מבנה תגיות, תיאום איתך.
  3. יישום — כתיבת קוד CacheManager, backends, סוכנים, גשר.
  4. בדיקות — בדיקת עומס עם JMeter (1,000 משתמשים וירטואליים) ואיסוף מדדים.
  5. פריסה — התקנה על staging וייצור, ניטור למשך שבוע.

מה כלול

תוצר תיאור
ארכיטקטורה סכמת אינטראקציה עם ליבת Bitrix
יישום קוד CacheManager, backends, אסטרטגיות, סוכנים
אינטגרציה BitrixCacheBridge לרכיבים
בדיקות דוח בדיקת עומס (שיעור פגיעה, זמן השהיה)
תיעוד PHPDoc, README, מדריך תפעול
תמיכה חודש חינם לאחר מסירה

לוח זמנים ועלות

שלב משך
ארכיטקטורת CacheManager, ממשק backend יום אחד
Redis backend עם תמיכה בתגיות יומיים
אסטרטגיות: stale-while-revalidate, בהיקף בקשה יומיים
סוכן חימום מטמון יום אחד
גשר לרכיבי Bitrix סטנדרטיים יום אחד
סטטיסטיקות, ממשק ניהול יומיים
בדיקת עומס יום אחד
הגדרת Redis Cluster / Sentinel (אופציונלי) 1–2 ימים

סה"כ: 10–12 ימי עבודה. אחריות קוד: שנה. עלות הפיתוח מחושבת באופן אישי. לפרויקטים עם אשכול שרתי PHP—הגדרת Redis Cluster או Sentinel נוספת: +1–2 ימים.

למידע נוסף על Redis ועקרונות מטמון.

הערך את הביצועים הנוכחיים של האתר שלך: אנו מציעים ביקורת מטמון תוך יומיים. הזמן מודול מטמון כדי לשמור על האתר שלך מהיר ויציב תחת כל עומס—צור קשר לייעוץ!