2017 © Pedro Peláez
 

library bitrix-cache

Comfortable fluent-interface for Bitrix cache.

image

webarchitect609/bitrix-cache

Comfortable fluent-interface for Bitrix cache.

  • Tuesday, June 5, 2018
  • by webarchitect609
  • Repository
  • 2 Watchers
  • 4 Stars
  • 1,436 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 3 Forks
  • 0 Open issues
  • 7 Versions
  • 44 % Grown

The README.md

Битрикс Кеш

Travis Build Status codecov PHP version Latest version Downloads License, (*1)

Удобная обёртка для работы с кешем в Битрикс через fluent interface или по PSR-16. Защита от "cache stampede" ("давки в кеше") по PSR-6: Caching Interface, (*2)

Возможности

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

Под "капотом" только Bitrix\Main\Data\Cache и Bitrix\Main\Data\TaggedCache из ядра D7., (*4)

Установка

  1. Установить через composer:, (*5)

    composer require webarchitect609/bitrix-cache
    
  2. Добавить подключение автозагрузчика composer в самое начало файла init.php, (*6)

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

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

Вы можете использовать эту библиотеку совершенно бесплатно, а можете поблагодарить автора за проделанную работу и поддержать желание делать новые полезные проекты:
- ЮMoney, (*7)

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

  1. Для ленивых и торопливых:, (*8)

    use WebArch\BitrixCache\Cache;
    
    $result = Cache::create()
                   ->callback(
                       function () {
                           /**
                            * Результат выполнения кода здесь
                            * кешируется на 1 час.
                            */
                           return date(DATE_ISO8601);
                       }
                   );
    
  2. Кеширование с использованием замыкания., (*9)

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

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

    use WebArch\BitrixCache\Cache;
    
    Cache::create()
         ->setPath('/myPath')
         ->delete('myKey');
    
  4. Запись тегированного кеша., (*12)

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

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

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

    use WebArch\BitrixCache\Cache;
    
    $cache = Cache::create();
    $result = $cache->callback(
                        function () use($cache) {
                            $cache->addTag('closureTag');
    
                            return date(DATE_ISO8601);
                        }
                    );
    
  5. Удаление тегированного кеша., (*15)

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

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

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

    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. Отмена записи кеша в момент исполнения замыкания., (*19)

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

    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., (*21)

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

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

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

    use WebArch\BitrixCache\Cache;
    
    Cache::create()
         ->setExpirationTime(new DateTimeImmutable('2020-12-30T23:59:59', new DateTimeZone('+03:00')))
         ->set('myKey', 'someValue');
    
  10. Использование PSR-16., (*25)

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

    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. Защита от "давки в кеше", (*27)

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

    use \WebArch\BitrixCache\AntiStampedeCacheAdapter;
    
    $path = '/some/path';
    $defaultLifetime = 60;
    $baseDir = 'someBaseDir';
    $cacheAdapter = new AntiStampedeCacheAdapter($path, $defaultLifetime, $baseDir);
    

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

    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 и соглашения Cache Contracts., (*30)

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

Очистка кеша

Метод \WebArch\BitrixCache\Cache::clear() очищает кеш только внутри $baseDir и подкаталога $path. Эти параметры относятся только к Битрикс и никак не описаны в PSR-16., (*31)

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

BSD-3-Clause, (*32)

The Versions

05/06 2018

dev-master

9999999-dev https://github.com/webarchitect609/bitrix-cache

Comfortable fluent-interface for Bitrix cache.

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

by Sergey Gripinskiy

cache bitrix

05/06 2018

v1.0.5

1.0.5.0 https://github.com/webarchitect609/bitrix-cache

Comfortable fluent-interface for Bitrix cache.

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

by Sergey Gripinskiy

cache bitrix

05/06 2018

v1.0.4

1.0.4.0 https://github.com/webarchitect609/bitrix-cache

Comfortable fluent-interface for Bitrix cache.

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

by Sergey Gripinskiy

cache bitrix

27/03 2018

v1.0.3

1.0.3.0 https://github.com/webarchitect609/bitrix-cache

Comfortable fluent-interface for Bitrix cache.

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

by Sergey Gripinskiy

cache bitrix

24/01 2018

v1.0.2

1.0.2.0 https://github.com/webarchitect609/bitrix-cache

Comfortable fluent-interface for Bitrix cache.

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

by Sergey Gripinskiy

cache bitrix

25/05 2017

v1.0.1

1.0.1.0 https://github.com/webarchitect609/bitrix-cache

Comfortable fluent-interface for Bitrix cache.

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

by Sergey Gripinskiy

cache bitrix

07/05 2017

v1.0.0

1.0.0.0 https://github.com/webarchitect609/bitrix-cache

Comfortable fluent-interface for Bitrix cache.

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

by Sergey Gripinskiy

cache bitrix