arrilot/bitrix-cacher

该软件包已被弃用,不再维护。未建议替代软件包。

3.0.2 2019-08-05 19:26 UTC

This package is auto-updated.

Last update: 2023-01-29 02:20:10 UTC


README

Latest Stable Version

此软件包不再积极维护

原因是我们不再使用Bitrix进行我们的项目。如果您对这个项目感兴趣并希望维护它 - 分支它并在本存储库中创建问题,以便我们将在此处放置分支的链接。

Bitrix Cacher - 用于更方便地缓存PHP变量的Bitrix内核包装

安装

  1. composer require arrilot/bitrix-cacher
  2. 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为零且不会进行缓存,相应地