apix / cache
一个轻量级的PSR-6缓存包装器,提供通用的接口以支持各种缓存后端,强调缓存标签和索引到Redis、Memcached、PDO/SQL、APC和其他适配器。
1.3.5
2020-06-11 09:10 UTC
Requires
- php: >=5.3.0
- psr/cache: ^1.0
Requires (Dev)
- phpunit/phpunit: ^4.0|^5.0
- satooshi/php-coveralls: ~0.7.1
Suggests
- ext-apc: Allows to cache into APC data store ~ up to PHP 5.4.
- ext-apcu: Allows to use APCu userland caching ~ any PHP version.
- ext-igbinary: Fast and small serialization format
- ext-memcached: Allows to use Memcached distributed memory caching system
- ext-mongo: Allows to cache into MongoDB instances using https://php.ac.cn/mongo ~ up to PHP 5.6.
- ext-mongodb: Allows to cache into MongoDB instances using https://php.ac.cn/mongodb ~ from PHP 7 and above and HHVM.
- ext-pdo: Allows to cache into PDO supported DBs such as Oracle, MS SQL server, IBM DB2.
- ext-pdo_mysql: Allows to use MySQL.
- ext-pdo_pgsql: Allows to use PostgreSQL
- ext-pdo_sqlite: Allows to cache into SQLite.
- ext-redis: So you can cache into Redis servers.
- msgpack/msgpack-php: MessagePack serialization format
Provides
- psr/cache-implementation: ^1.0
README
Apix Cache,PHP的缓存标签
Apix Cache是一个通用的轻量级缓存包装器,具有PSR-6接口,并强调缓存标签和索引。
缓存标签允许通过一个或多个给定的标签找到/更新所有数据项。例如,提供批量删除所有匹配特定标签(如版本字符串)的过时条目。
- 完全单元测试,符合PSR-1、PSR-2、PSR-4和PSR-6(缓存)。
- 持续集成
- 针对 PHP
5.3,5.4,5.5,5.6,7.0,7.1,7.2,7.3和HHVM, - 以及针对
APC
,APCu
,Redis
,MongoDB
,Sqlite
,MySQL
,PgSQL
和Memcached
,... - 支持一系列序列化器:
igBinary
,msgpack
,json
,php
,...
- 针对 PHP
- 可扩展的,有额外的扩展可用
- apix/simple-cache 提供了 SimpleCache(PSR-16)接口。
- 更多贡献将在此处链接。
- 作为 Composer
和 PEAR包提供。
⇄ 拉取请求 和 ★ 星级 总是受欢迎。有关错误和功能请求,请 创建一个问题。
缓存后端
目前提供以下缓存存储
APCu
和 APC 带有标签支持,- Redis 使用
PhpRedis
扩展 带有标签支持, - MongoDB 使用新的
mongodb
或旧的mongo
扩展 带有标签支持, - Memcached 使用
Memcached
扩展 带有索引、标签和命名空间支持, - 以及关系型数据库使用 PDO 带有标签支持
- 目录和支持标签的
文件。 - 运行时,内存数组存储。
工厂使用(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