arrilot / bitrix-cacher
该软件包已被弃用,不再维护。未建议替代软件包。
3.0.2
2019-08-05 19:26 UTC
Requires
- php: >=5.4.0
README
此软件包不再积极维护
原因是我们不再使用Bitrix进行我们的项目。如果您对这个项目感兴趣并希望维护它 - 分支它并在本存储库中创建问题,以便我们将在此处放置分支的链接。
Bitrix Cacher - 用于更方便地缓存PHP变量的Bitrix内核包装
安装
composer require arrilot/bitrix-cacher
- 在
init.php
中注册软件包 -Arrilot\BitrixCacher\ServiceProvider::register();
使用
通过方法
use Arrilot\BitrixCacher\Cache; use Arrilot\BitrixCacher\AbortCacheException; $result = Cache::remember('cacheKeyHere', 3600, function () { $result = 0; for ($i = 0; $i < 20000000; $i++) { $result += $i; } if ( // something bad happened ) { // выполнит $obCache->AbortDataCache() и вернёт null в качестве $result throw new AbortCacheException(); } return $result; });
为了方便起见,建议添加全局助手
/** * @param null|string $key * @param null|int $seconds * @param null|Closure $callback * @param string $initDir * @param string $basedir * @return \Arrilot\BitrixCacher\CacheBuilder|mixed */ function cache($key = null, $seconds = null, $callback = null, $initDir = '/', $basedir = 'cache') { if (func_num_args() === 0) { return new \Arrilot\BitrixCacher\CacheBuilder(); } return \Arrilot\BitrixCacher\Cache::remember($key, $seconds, $callback, $initDir, $basedir); }
并使用它,要么代替Cache::remember()
,要么作为CacheBuilder构建链的开始
请注意,与CPHPCache::InitCache()
(及其d7的类似物)不同,默认情况下$initDir = '/'
,而不是false。这意味着默认情况下缓存对整个网站都是可用的。
通过CacheBuilder
$result = cache() ->key('cacheKeyHere') ->seconds(3600) // также доступны методы minutes(), hours(), days() ->initDir('/foo') // можно опустить если хотим использовать значение по-умолчанию ->baseDir('cache/foo') // можно опустить если хотим использовать значение по-умолчанию ->execute(function () { ... return ...; });
在PHP变量中缓存
在可能多次调用相同缓存(即具有相同参数key、initDir、baseDir)的情况下,建议在php变量中添加额外的缓存,以避免在执行一个脚本期间多次从外部缓存存储(文件、memcache等)中检索。使用CacheBuilder可以非常容易地做到这一点 - 在构建缓存链中添加->enablePhpLayer()
。
$result = cache() ->key('cacheKeyHere') ->seconds(3600) ->enablePhpLayer() ->execute(function () { ... return ...; });
如果需要仅在php变量中缓存(不接触外部存储),则可以这样操作
$result = cache() ->key('cacheKeyHere') ->onlyPhpLayer() ->execute(function () { ... return ...; });
在这种情况下,缓存时间已没有意义。
中断缓存
如果您想在execute中取消创建缓存,则需要抛出异常Arrilot\BitrixCacher\AbortCacheException。在这种情况下,execute链将返回null,可以使用->whenAbort([])->
或->whenAbort(function () { return 'some message'; })->
来更改此值。
调试
该软件包提供额外的调试窗口,可以查看
- 我们向缓存做了多少和什么请求,
- 有多少命中,
- 有多少错误,
- 有多少请求的TTL为零且不会进行缓存,相应地