apix/cache

一个轻量级的PSR-6缓存包装器,提供通用的接口以支持各种缓存后端,强调缓存标签和索引到Redis、Memcached、PDO/SQL、APC和其他适配器。

1.3.5 2020-06-11 09:10 UTC

This package is auto-updated.

Last update: 2024-08-26 16:48:33 UTC


README

Apix Cache,PHP的缓存标签 构建状态

Latest Stable Version Total Downloads Build Status Code Quality Code Coverage License

Apix Cache是一个通用的轻量级缓存包装器,具有PSR-6接口,并强调缓存标签和索引。

缓存标签允许通过一个或多个给定的标签找到/更新所有数据项。例如,提供批量删除所有匹配特定标签(如版本字符串)的过时条目。

  • 完全单元测试,符合PSR-1、PSR-2、PSR-4和PSR-6(缓存)。
  • 持续集成
    • 针对 PHP 5.35.45.55.67.07.17.27.3 和HHVM
    • 以及针对 APCAPCuRedisMongoDBSqliteMySQLPgSQLMemcached,...
    • 支持一系列序列化器:igBinarymsgpackjsonphp,...
  • 可扩展的,有额外的扩展可用
    • apix/simple-cache 提供了 SimpleCache(PSR-16)接口。
    • 更多贡献将在此处链接。
  • 作为 Composer PEAR 包提供。

拉取请求 和 ★ 星级 总是受欢迎。有关错误和功能请求,请 创建一个问题

缓存后端

目前提供以下缓存存储

工厂使用(PSR-Cache包装器)

  use Apix\Cache;

  $backend = new \Redis();
  #$backend = new \PDO('sqlite:...');    // Any supported client object e.g. Memcached, MongoClient, ...
  #$backend = new Cache\Files($options); // or one that implements Apix\Cache\Adapter
  #$backend = 'apcu';                    // or an adapter name (string) e.g. "APC", "Runtime"
  #$backend = new MyArrayObject();       // or even a plain array() or \ArrayObject.

  $cache = Cache\Factory::getPool($backend);             // without tagging support
  #$cache = Cache\Factory::getTaggablePool($backend);    // with tagging
  
  $item = $cache->getItem('wibble_id');
  
  if ( !$cache->isHit() ) {
    $data = compute_expensive_stuff();
    $item->set($data);
    $cache->save($item);
  }

  return $item->get();

基本使用(Apix本地)

  use Apix\Cache;

  $cache = new Cache\Apcu;

  // try to retrieve 'wibble_id' from the cache
  if ( !$data = $cache->load('wibble_id') ) {
    
    // otherwise, get some data from the origin
    // example of arbitrary mixed data
    $data = array('foo' => 'bar');

    // and save it to the cache
    $cache->save($data, 'wibble_id');
  }

您还可以在您的用例中使用以下内容

  // save $data to the cache as 'wobble_id',
  // tagging it along the way as 'baz' and 'flob',
  // and set the ttl to 300 seconds (5 minutes)
  $cache->save($data, 'wobble_id', array('baz', 'flob'), 300);

  // retrieve all the cache ids under the tag 'baz'
  $ids = $cache->loadTag('baz');

  // clear out all items with a 'baz' tag
  $cache->clean('baz');

  // remove the named item
  $cache->delete('wibble_id');

  // flush out the cache (of all -your- stored items)
  $cache->flush();

高级使用

所有后端共享的选项

  use Apix\Cache;
  
  // default options
  $options = array(
      'prefix_key'  => 'apix-cache-key:', // prefix cache keys
      'prefix_tag'  => 'apix-cache-tag:', // prefix cache tags
      'tag_enable'  => true               // wether to enable tags support
  );

  // start APCu as a local cache
  $local_cache = new Cache\Apcu($options);

Redis特定

  // additional (default) options
  $options['atomicity']  = false;   // false is faster, true is guaranteed
  $options['serializer'] = 'php';   // null, php, igbinary, json and msgpack

  $redis_client = new \Redis;       // instantiate phpredis*
  $distributed_cache = new Cache\Redis($redis_client, $options);

** 查看PhpRedis以获取实例化用法。

Memcached特定

  // additional (default) options, specific to Memcached
  $options['prefix_key'] = 'key_';  // prefix cache keys
  $options['prefix_tag'] = 'tag_';  // prefix cache tags
  $options['prefix_idx'] = 'idx_';  // prefix cache indexes
  $options['prefix_nsp'] = 'nsp_';  // prefix cache namespaces
  $options['serializer'] = 'auto';  // auto, igbinary, msgpack, php, json and json_array.

  $memcached  = new \Memcached;     // a Memcached*** instance
  $shared_cache = new Cache\Memcached($memcached, $options);

序列化器auto(默认值)如果可用则是igBinary,然后是msgpack,如果不可用则是php

*** 查看Memcached以获取实例化详细信息。

MongoDB特定

  // additional (default) options
  $options['object_serializer'] = 'php';  // null, json, php, igBinary
  $options['db_name'] = 'apix';           // name of the mongo db
  $options['collection_name'] = 'cache';  // name of the mongo collection

  $mongo  = new \MongoDB\Client;          // MongoDB native driver
  #$mongo  = new \MongoClient;            // or MongoDB legacy driver
  $cache = new Cache\Mongo($mongo, $options);

PDO特定

  // additional (default) options, specific to the PDO backends
  $options['db_table']   = 'cache';       // table to hold the cache
  $options['serializer'] = 'php';         // null, php, igbinary, json and msgpack
  $options['preflight']  = true;          // wether to preflight the DB
  $options['timestamp']  = 'Y-m-d H:i:s'; // the timestamp DB format

  // with SQLITE
  $dbh = new \PDO('sqlite:/tmp/apix_tests.sqlite3');
  $relational_cache = new Cache\Pdo\Sqlite($dbh, $options);

  // with MYSQL, MariaDB and Percona
  $dbh = new \PDO('mysql:host=xxx;port=xxx;dbname=xxx', 'user', 'pass');
  $mysql_cache = new Cache\Pdo\Mysql($dbh, $options);

  // with PGSQL
  $dbh = new \PDO('pgsql:dbname=xxx;host=xxx', 'xxx', 'xxx');
  $postgres_cache = new Cache\Pdo\Pgsql($dbh, $options);

  // with a SQL:1999 compliant DB, e.g. Oracle
  $dbh = new \PDO('oci:dbname=xxx', 'xxx', 'xxx');
  $sql1999_cache = new Cache\Pdo\Sql1999($dbh, $options);

preflight选项将在这些表不存在时动态创建所需的表。一旦这些表存在,将preflight设置为false以避免不必要的检查。

文件系统特定

  // additional (default) options
  $options['directory'] = sys_get_temp_dir() . '/apix-cache'; // Directory where the cache is created
  $options['locking'] = true;                                 // File locking (recommended)
  
  $files_cache = new Cache\Files($options);
  // or
  $directory_cache = new Cache\Directory($options);  
  • 文件:缓存元数据(过期时间和标签)直接存储在缓存文件中。
  • 目录:元数据与缓存数据分开存储。

安装

此项目遵循语义版本,并可以使用composer进行安装

$ composer require apix/cache:^1.3

此项目的所有重大更改都记录在其更改日志中。

许可证

此作品根据新BSD许可证授权--有关详细信息,请参阅许可证
版权(c)2010-2016 Franck Cassedanne