phossa/phossa-cache

遵循PSR-6规范的PHP缓存库。

1.0.10 2016-04-18 03:50 UTC

This package is not auto-updated.

Last update: 2024-09-17 10:06:31 UTC


README

Build Status HHVM Latest Stable Version License

查看新的库 phoole/cache 简介

Phossa-cache是一个遵循PSR-6规范的缓存库。它支持多种驱动程序和有用的功能,如绕过、加密、雪崩保护、垃圾收集、可标记项等。

有关PSR-6PSR-6 Meta的更多信息

安装

通过composer工具安装。

composer require "phossa/phossa-cache=1.*"

或者将以下行添加到您的composer.json

{
    "require": {
       "phossa/phossa-cache": "^1.0.8"
    }
}

功能

  • 完全遵循PSR-6。可能是目前GitHub上功能最丰富的PSR-6缓存包。

  • 支持所有可序列化的PHP数据类型。

  • 扩展:

    • 绕过:如果URL中看到触发器(例如'?nocache=true'),则绕过缓存。

    • 雪崩:当缓存的对象的生存时间小于可配置的时间时,以一定比例,缓存将在'isHit()'上返回false,这将触发对象的重新生成。

    • 加密:对序列化内容进行简单加密的扩展

    • 垃圾收集:一个简单扩展来自动清理缓存池。

    • 可标记:项是可标记的,并且可以通过标记进行清除。

    • 分散未命中:通过稍微调整过期时间来平衡项未命中的峰值。

  • 驱动程序

    • FilesystemDriver

      文件系统驱动程序将缓存的项存储在文件系统中。它将缓存的项存储在md5文件名的平面文件中。可配置的设置有

      • dir_root:文件系统缓存的基目录
      • hash_level:散列子目录级别。默认为2
      • file_pref:缓存项文件名前缀
      • file_suff:缓存项文件名后缀
      /*
       * construct the driver manually
       */
      $driver = new Driver\FilesystemDriver([
          'hash_level'    => 1,
          'file_pref'     => 'cache.',
          'dir_root'      => '/var/tmp/cache',
      ]);
    • NullDriver

      黑洞驱动程序。用作所有其他驱动程序的回退驱动程序。

    • 回退驱动程序

      如果所需的驱动程序未就绪,用户可以配置回退驱动程序。对于所有其他驱动程序,NullDriver是最终的回退。

      // default memcache driver
      $driver = new Driver\MemcacheDriver([
          'server' => [ '127.0.0.1', 11211 ]
      ]);
      
      // set a fallback filesystem driver
      $driver->setFallback(new Driver\FilesystemDriver([
          'dir_root' => '/var/tmp/cache'
      ]));
      
      $cache = new CachePool($driver);
    • CompositeDriver

      CompositeDriver由两个驱动程序组成,即前端驱动程序和后端驱动程序。用户通过定义一个tester可调用函数来过滤可缓存的对象,该函数将确定哪些对象存储在两端或仅存储在后端。

      /*
       * set the composite driver
       */
      $driver = new Driver\CompositeDriver(
          // front-end driver
          new Driver\MemcacheDriver([
              'server' => [ '127.0.0.1', 11211 ]
          ]),
      
          // backend driver
          new Driver\FilesystemDriver([
              'dir_root' => '/var/tmp/cache'
          ]),
      
          // other settings
          [
              // if size > 10k, stores at backend only
              'tester' => function($item) {
                  if (strlen($item->get()) > 10240) return false;
                  return true;
              }
          ]
      );
  • 日志记录

    phossa-cache支持遵循psr-3规范的记录器。还提供了log()方法进行记录。

    /*
     * set the logger
     */
    $cache->setLogger($psrLogger);
    $cache->log('info', 'this is an info');

    或者在缓存初始化时配置记录器

    /*
     * the third argument is used for configuring CachePool
     */
    $cache = new CachePool($driver, [],
        'logger' => $psrLogger
    );
    $cache->log('info', 'this is an info');
  • 错误

    在缓存过程中不会抛出异常。因此,只使用错误。

    /*
     * create cache pool, exceptions may thrown here
     */
    $cache = new CachePool();
    $cache->setLogger($psrLogger);
    
    $item = $cache->getItem('widget_list');
    $val  = $item->get();
    if ($cache->hasError()) {
        $cache->log('error', $cache->getError());
        $widget_list = compute_expensive_widget_list();
        $item->set($widget_list);
        $item->expiresAfter(3600); // expires after an hour
        $cache->save($item);
        if ($cache->hasError()) $cache->log('error', $cache->getError());
    } else {
        $widget_list = $val;
    }
  • 国际化

    消息在Message\Message.php中。可以实现国际化。有关详细信息,请参阅phossa-shared包。

  • 支持PHP 5.4+、PHP 7.0、HHVM。

  • PHP7已准备好进行返回类型声明和参数类型声明。

  • 遵循PSR-1、PSR-2、PSR-3、PSR-4、PSR-6规范。

用法

  • 简单用法

    /*
     * use the default FilesystemDriver which also set default cache
     * directory to sys_get_temp_dir() .'/cache'
     */
    $cache = new CachePool();
    
    $item = $cache->getItem('widget_list');
    if (!$item->isHit()) {
        $value = compute_expensive_widget_list();
        $item->set($value);
        $cache->save($item);
    }
    $widget_list = $item->get();
  • 配置驱动程序

    $driver = new Driver\FilesystemDriver([
        'hash_level'    => 1, // subdirectory hash levels
        'file_pref'     => 'cache.', // cache file prefix
        'file_suff'     => '.txt',   // cache file suffix
        'dir_root'      => '/var/tmp/cache' // reset cache root
    ]);
    
    $cache = new CachePool($driver);
  • 使用扩展

    /*
     * SerializeExtension is the default ext, always used.
     * Second argument is an array of ExtensionInterface or config array
     */
    $cache = new CachePool(
        $driver,
        [
            new Extension\BypassExtension(),
            new Extension\StampedeExtension(['probability' => 80 ])
        ]
    );

    或使用addExtension()

    $cache = new CachePool($driver);
    $cache->addExtension(new Extension\BypassExtension());
  • 分层缓存支持

    FilesystemDriver和其他即将推出的驱动程序支持目录风格的分层结构。

    // hierarchy key
    $item = $cache->getItem('mydomain/host1/newfile_xxx');
    
    // ending '/' means delete the hierarchy structure
    $cache->deleteItem('mydomain/host1/');

依赖关系

  • PHP >= 5.4.0
  • phossa/phossa-shared 1.0.6
  • psr/cache 1.*

许可证

MIT许可证