PHPackages                             letraceursnork/bitrix-cache - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Caching](/categories/caching)
4. /
5. letraceursnork/bitrix-cache

ActiveLibrary[Caching](/categories/caching)

letraceursnork/bitrix-cache
===========================

Comfortable fluent interface for Bitrix cache. Anti-stampede cache protection.

1.11.2.1(4mo ago)0309↓50%BSD-3-ClausePHPPHP ^8.0

Since Dec 29Pushed 4mo agoCompare

[ Source](https://github.com/LeTraceurSnork/bitrix-cache)[ Packagist](https://packagist.org/packages/letraceursnork/bitrix-cache)[ Docs](https://github.com/webarchitect609/bitrix-cache)[ Fund](https://sobe.ru/na/bitrix_cache)[ RSS](/packages/letraceursnork-bitrix-cache/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (10)Versions (2)Used By (0)

Битрикс Кеш
===========

[](#битрикс-кеш)

[![Travis Build Status](https://camo.githubusercontent.com/c7706d6ffb165d711b719074aa10928b75e91a989fcace4ab5eeb245ff694c0b/68747470733a2f2f7472617669732d63692e636f6d2f7765626172636869746563743630392f6269747269782d63616368652e7376673f6272616e63683d6d6173746572)](https://travis-ci.com/webarchitect609/bitrix-cache)[![codecov](https://camo.githubusercontent.com/7b7902fbe8f02ca8db71d7045baaba62209e2172a28291a78a601691db7a88dc/68747470733a2f2f636f6465636f762e696f2f67682f7765626172636869746563743630392f6269747269782d63616368652f6272616e63682f6d61737465722f67726170682f62616467652e7376673f746f6b656e3d4750413331464f494741)](https://codecov.io/gh/webarchitect609/bitrix-cache)[![PHP version](https://camo.githubusercontent.com/c563651c7b02e40e3170f7e8a2932a229a2310f5150422ede8b52faf0cad0cc7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f7765626172636869746563743630392f6269747269782d6361636865)](https://www.php.net/supported-versions.php)[![Latest version](https://camo.githubusercontent.com/7b928c40e2f21d45b188c2acb0894f50c4bd21bf40780e5c758335b88da5463c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f7461672f7765626172636869746563743630392f6269747269782d63616368653f736f72743d73656d766572)](https://github.com/webarchitect609/bitrix-cache/releases)[![Downloads](https://camo.githubusercontent.com/a5527ab7aa3f40e7d4bba48c50f865c7995eebc7abb6bd59a5c598340f47f393/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f7765626172636869746563743630392f6269747269782d6361636865)](https://packagist.org/packages/webarchitect609/bitrix-cache)[![License](https://camo.githubusercontent.com/e06f74de54a48ada0c80b8725d0bdb39b814660ad42b2f1dc4c5950ae6294e51/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f7765626172636869746563743630392f6269747269782d6361636865)](LICENSE.md)

Удобная обёртка для работы с кешем в Битрикс через fluent interface или по [PSR-16](https://www.php-fig.org/psr/psr-16/). Защита от ["cache stampede"](https://en.wikipedia.org/wiki/Cache_stampede) ("давки в кеше") по [PSR-6: Caching Interface](https://www.php-fig.org/psr/psr-6/)

Возможности
-----------

[](#возможности)

Основное назначение этой библиотеки - **максимальное ускорение** написания кода, требующего использования кеширования. Дополнительное - **защита от "давки в кеше"**("cache stampede" или "dog piling") для высоконагруженных проектов методами "блокировки"("locking") и "вероятностного преждевременного устаревания"("probabilistic early expiration"), адаптированная из [Symfony Cache 5.1](https://packagist.org/packages/symfony/cache).

- запись, чтение, валидация и удаление закешированной информации через fluent interface с поддержкой всех Битрикс-специфичных параметров:
    - baseDir
    - path
    - [тегированный кеш](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2978&LESSON_PATH=3913.4565.4780.2978)(в том числе теги [инфоблоков](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&CHAPTER_ID=04610&LESSON_PATH=3913.4610))
- кеширование результата выполнения [замыкания](https://www.php.net/manual/ru/functions.anonymous.php)
- поддержка интерфейса `Psr\SimpleCache\CacheInterface` по [PSR-16: Common Interface for Caching Libraries](https://www.php-fig.org/psr/psr-16/)
- адаптер `AntiStampedeCacheAdapter` с двойной защитой от "давки в кеше", соответствующий [PSR-6: Caching Interface](https://www.php-fig.org/psr/psr-6/) и [Symfony Cache Contracts](https://github.com/symfony/cache-contracts)

Под "капотом" **только** `Bitrix\Main\Data\Cache` и `Bitrix\Main\Data\TaggedCache` из [ядра D7](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&CHAPTER_ID=05062&LESSON_PATH=3913.5062).

Установка
---------

[](#установка)

1. Установить через [composer](https://getcomposer.org/):

    ```
    composer require webarchitect609/bitrix-cache
    ```
2. Добавить подключение [автозагрузчика](https://getcomposer.org/doc/01-basic-usage.md#autoloading) composer в самое начало [файла init.php](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2916&LESSON_PATH=3913.4776.2916)

    ```
    require_once $_SERVER['DOCUMENT_ROOT'] . '/../../vendor/autoload.php';
    ```

Помочь проекту
--------------

[](#помочь-проекту)

Вы можете использовать эту библиотеку совершенно бесплатно, а можете поблагодарить автора за проделанную работу и поддержать желание делать новые полезные проекты:

- [ЮMoney](https://sobe.ru/na/bitrix_cache)

Использование
-------------

[](#использование)

1. Для ленивых и торопливых:

    ```
    use WebArch\BitrixCache\Cache;

    $result = Cache::create()
                   ->callback(
                       function () {
                           /**
                            * Результат выполнения кода здесь
                            * кешируется на 1 час.
                            */
                           return date(DATE_ISO8601);
                       }
                   );
    ```
2. Кеширование с использованием [замыкания](https://www.php.net/manual/ru/functions.anonymous.php).

    ```
    use WebArch\BitrixCache\Cache;

    $result = Cache::create()
                   ->setPath('/myPath')
                   ->setKey('myKey')
                   ->setTTL(60)
                   ->callback(
                       function () {
                           /**
                            * Результат выполнения этого
                            * замыкания кешируется.
                            */
                           return date(DATE_ISO8601);
                       }
                   );
    ```
3. Сброс кеша по key.

    Для очистки кеша из предыдущего примера необохдимо вызвать метод `delete(string $key)`, предварительно установив `path` и `baseDir` соответствующие ранее созданному кешу(по умолчанию `baseDir === 'cache'`).

    ```
    use WebArch\BitrixCache\Cache;

    Cache::create()
         ->setPath('/myPath')
         ->delete('myKey');
    ```
4. Запись тегированного кеша.

    Кеш по пути `/myPath` будет снабжён двумя тегами: `myTag` и тегом инфоблока `iblock_id_1`.

    ```
    use WebArch\BitrixCache\Cache;

    $result = Cache::create()
                   ->setPath('/myPath')
                   ->addTag('myTag')
                   ->addIblockTag(1)
                   ->callback(
                       function () {
                           return date(DATE_ISO8601);
                       }
                   );
    ```

    Тег кеша также можно установить внутри замыкания:

    ```
    use WebArch\BitrixCache\Cache;

    $cache = Cache::create();
    $result = $cache->callback(
                        function () use($cache) {
                            $cache->addTag('closureTag');

                            return date(DATE_ISO8601);
                        }
                    );
    ```
5. Удаление тегированного кеша.

    Кеш из предыдущего примера может быть очищен по тегу. Важно, что при очистке по тегу не требуется устанавливать никакие другие параметры.

    ```
    use WebArch\BitrixCache\Cache;

    Cache::create()
         ->clearByTag('myTag');
    ```
6. Использование всех возможностей fluent-интерфейса.

    В результате запись ведётся не в папку `cache`, а в папку `myBaseDir` по пути `/myPath` с ключом `myKey` на 60 секунд и только с тегом `TheOnlyTag`, т.к. все предыдущие теги были сброшены вызовом `clearTags()`

    ```
    use WebArch\BitrixCache\Cache;

    $result = Cache::create()
                   ->setBaseDir('myBaseDir')
                   ->setPath('/myPath')
                   ->setKey('myKey')
                   ->setTTL(60)
                   ->addIblockTag(2)
                   ->addTag('myTagOne')
                   ->addTag('myTagTwo')
                   ->clearTags()
                   ->addTag('TheOnlyTag')
                   ->callback(
                       function () {
                           return date(DATE_ISO8601);
                       }
                   );
    ```
7. Отмена записи кеша в момент исполнения замыкания.

    Метод `abort()` используется для предотвращения записи кеша вне зависимости от того, что вернёт замыкание.

    ```
    use WebArch\BitrixCache\Cache;

    $cache = Cache::create();
    $result = $cache->callback(
                        function () use ($cache) {
                            /**
                             * Например, API вернул ответ, что товар не найден.
                             */
                            $productNotFound = true;
                            if($productNotFound){
                                $cache->abort();
                            }

                            return date(DATE_ISO8601);
                        }
                    );
    ```
8. Задание TTL в виде интервала `DateInterval`.

    В результате значение будет закешировано на 1 месяц и 15 минут.

    ```
    use WebArch\BitrixCache\Cache;

    $result = Cache::create()
                   ->setTTLInterval(new DateInterval('P1MT15M'))
                   ->callback(
                       function () {
                           return date(DATE_ISO8601);
                       }
                   );
    ```
9. Задание TTL к заданному времени.

    В результате значение будет закешировано до 31 декабря 2020. Но если указанная дата и время уже прошли, будет ошибка. Метод полезен, чтобы, например, задавать время жизни кеша по дате окончания активности.

    ```
    use WebArch\BitrixCache\Cache;

    Cache::create()
         ->setExpirationTime(new DateTimeImmutable('2020-12-30T23:59:59', new DateTimeZone('+03:00')))
         ->set('myKey', 'someValue');
    ```
10. Использование [PSR-16](https://www.php-fig.org/psr/psr-16/).

    Все методы по PSR-16 работают **только** внутри указанных `baseDir` и `path`. Т.е. вызов `clear()` **не очистит**полностью весь кеш Битрикс.

    ```
    use WebArch\BitrixCache\Cache;

    $cache = Cache::create()
                 ->setBaseDir('myBaseDir')
                 ->setPath('/myPath');

    $cache->set('myKey', 'myValue', 86400);
    $result = $cache->get('myKey', 'defaultValue');
    $cache->delete('myKey');
    $cache->clear();
    $cache->setMultiple(
       [
           'key1' => 'value1',
           'key2' => 'value2',
       ]
    );
    $multipleResult = $cache->getMultiple(['key1', 'key2', 'key3'], 'defaultValueForMissingMultiple');
    $cache->deleteMultiple(['key1', 'key2', 'key3', 'key4']);
    /**
    * Внимание! Этот метод можно использовать только для прогрева кеша. См. примечание к методу.
    */
    $cache->has('key2');
    ```
11. Защита от "давки в кеше"

    Отдельно должен быть собран адаптер, обслуживающий кеш с защитой от "давки".

    ```
    use \WebArch\BitrixCache\AntiStampedeCacheAdapter;

    $path = '/some/path';
    $defaultLifetime = 60;
    $baseDir = 'someBaseDir';
    $cacheAdapter = new AntiStampedeCacheAdapter($path, $defaultLifetime, $baseDir);
    ```

    Затем следует использовать этот адаптер в тех местах кода, где такая защита требуется.

    ```
    use \WebArch\BitrixCache\AntiStampedeCacheAdapter;
    use \WebArch\BitrixCache\CacheItem;

    /** @var AntiStampedeCacheAdapter $cacheAdapter */
    $cacheAdapter->get(
        'myKey',
        function (CacheItem $cacheItem) {
            $cacheItem->expiresAfter(3600);

            return date(DATE_ISO8601);
        }
    );
    ```

    Дополнительная информация описана в документации компонента [Symfony Cache](https://symfony.com/doc/5.1/components/cache.html#cache-component-contracts) и соглашения [Cache Contracts](https://symfony.com/doc/5.1/components/cache.html#cache-component-contracts).

Известные особенности
---------------------

[](#известные-особенности)

### Очистка кеша

[](#очистка-кеша)

Метод `\WebArch\BitrixCache\Cache::clear()` очищает кеш **только** внутри `$baseDir` и подкаталога `$path`. Эти параметры относятся только к Битрикс и никак не описаны в [PSR-16](https://www.php-fig.org/psr/psr-16/).

Лицензия и информация об авторах
--------------------------------

[](#лицензия-и-информация-об-авторах)

[BSD-3-Clause](LICENSE.md)

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance74

Regular maintenance activity

Popularity16

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 Bus Factor1

Top contributor holds 92.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

141d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8626d285a2c7ac7cd4f72d196cf4b3685f214bf3561faaa9be4596c21ed95db7?d=identicon)[LeTraceurSnork](/maintainers/LeTraceurSnork)

---

Top Contributors

[![webarchitect609](https://avatars.githubusercontent.com/u/11293610?v=4)](https://github.com/webarchitect609 "webarchitect609 (39 commits)")[![LeTraceurSnork](https://avatars.githubusercontent.com/u/11344267?v=4)](https://github.com/LeTraceurSnork "LeTraceurSnork (2 commits)")[![olegpro](https://avatars.githubusercontent.com/u/1092443?v=4)](https://github.com/olegpro "olegpro (1 commits)")

---

Tags

bitrixcachecachingpsr-16

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/letraceursnork-bitrix-cache/health.svg)

```
[![Health](https://phpackages.com/badges/letraceursnork-bitrix-cache/health.svg)](https://phpackages.com/packages/letraceursnork-bitrix-cache)
```

###  Alternatives

[psr/simple-cache

Common interfaces for simple caching

8.1k727.3M2.1k](/packages/psr-simple-cache)[symfony/cache

Provides extended PSR-6, PSR-16 (and tags) implementations

4.2k348.9M2.5k](/packages/symfony-cache)[webarchitect609/bitrix-cache

Comfortable fluent interface for Bitrix cache. Anti-stampede cache protection.

2831.2k8](/packages/webarchitect609-bitrix-cache)[laminas/laminas-cache

Caching implementation with a variety of storage options, as well as codified caching strategies for callbacks, classes, and output

1076.9M130](/packages/laminas-laminas-cache)[cache/simple-cache-bridge

A PSR-6 bridge to PSR-16. This will make any PSR-6 cache compatible with SimpleCache.

423.1M27](/packages/cache-simple-cache-bridge)[chillerlan/php-cache

A psr/simple-cache implementation. PHP 8.1+

15211.8k11](/packages/chillerlan-php-cache)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
