webarchitect609/bitrix-cache
Bitrix缓存舒适流畅的接口。反冲缓存保护。
Requires
- php: ^7.2 || ^8.0
- psr/cache: ^1.0
- psr/log: ^1.1
- psr/simple-cache: ^1.0
- symfony/contracts: ^1.1.8 || ^2.0 || ^3.0
- symfony/polyfill-php80: ^1.18
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.4
- phpstan/phpstan: 1.10
- phpunit/phpunit: ^9.6
- roave/security-advisories: dev-master
- webarchitect609/bitrix-taxidermist: ^0.2.0
This package is auto-updated.
Last update: 2024-09-26 16:16:32 UTC
README
通过流畅接口或按照 PSR-16 使用 Bitrix 缓存。提供针对 "缓存冲撞" 的保护,通过 PSR-6: Caching Interface
功能
该库的主要目的是最大程度地加快需要使用缓存的代码的编写。此外,它还提供针对高负载项目的方法,以“锁定”和“概率提前过期”来防止“缓存冲撞”(“cache stampede”或“dog piling”),这些方法是从 Symfony Cache 5.1 中改编的。
- 通过流畅接口支持所有 Bitrix 特定参数,记录、读取、验证和删除缓存的详细信息
- 缓存闭包执行结果
- 支持 PSR-16: Common Interface for Caching Libraries 接口
- 提供双重“缓存冲撞”保护的
AntiStampedeCacheAdapter
适配器,符合 PSR-6: Caching Interface 和 Symfony Cache Contracts
底层仅使用 D7 内核 的 Bitrix\Main\Data\Cache
和 Bitrix\Main\Data\TaggedCache
。
安装
-
通过 composer 安装
composer require webarchitect609/bitrix-cache
-
在 init.php 文件的开始处添加 composer 自动加载器的连接
require_once $_SERVER['DOCUMENT_ROOT'] . '/../../vendor/autoload.php';
帮助项目
您可以免费使用这个库,也可以感谢作者的工作并支持他们做更多有用的项目
使用
-
对于懒惰和忙碌的开发者
use WebArch\BitrixCache\Cache; $result = Cache::create() ->callback( function () { /** * Результат выполнения кода здесь * кешируется на 1 час. */ return date(DATE_ISO8601); } );
-
使用 闭包 进行缓存。
use WebArch\BitrixCache\Cache; $result = Cache::create() ->setPath('/myPath') ->setKey('myKey') ->setTTL(60) ->callback( function () { /** * Результат выполнения этого * замыкания кешируется. */ return date(DATE_ISO8601); } );
-
按 key 刷新缓存。
在清理上一个示例中的缓存之前,需要调用方法
delete(string $key)
,并预先设置path
和baseDir
,使其与先前创建的缓存匹配(默认baseDir === 'cache'
)。use WebArch\BitrixCache\Cache; Cache::create() ->setPath('/myPath') ->delete('myKey');
-
记录带标签的缓存。
位于
/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); } );
-
删除带标签的缓存。
可以使用标签清理上一个示例中的缓存。重要的是,清理标签时不需要设置其他任何参数。
use WebArch\BitrixCache\Cache; Cache::create() ->clearByTag('myTag');
-
使用所有流畅接口功能。
结果记录不是在
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); } );
-
在执行闭包时取消缓存记录。
使用
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); } );
-
将TTL设置为
DateInterval
类型。结果将缓存1个月零15分钟。
use WebArch\BitrixCache\Cache; $result = Cache::create() ->setTTLInterval(new DateInterval('P1MT15M')) ->callback( function () { return date(DATE_ISO8601); } );
-
将TTL设置为指定的时间。
结果将缓存到2020年12月31日。但如果指定的时间已经过去,将会出现错误。此方法适用于设置缓存的生命周期为活动结束日期,例如。
use WebArch\BitrixCache\Cache; Cache::create() ->setExpirationTime(new DateTimeImmutable('2020-12-30T23:59:59', new DateTimeZone('+03:00'))) ->set('myKey', 'someValue');
-
使用PSR-16。
所有PSR-16方法仅在指定的
baseDir
和path
内部工作。也就是说,调用clear()
不会完全清除Bitrix的整个缓存。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');
-
防止缓存“潮汐”。
必须单独编译一个用于处理具有“潮汐”保护功能的缓存适配器。
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和缓存约定Cache Contracts的更多信息,请参阅文档。
已知特性
清除缓存
\WebArch\BitrixCache\Cache::clear()
方法只清除$baseDir
和$path
子目录内的缓存。这些参数仅适用于Bitrix,并未在PSR-16中描述。