APIx Cache is a generic and thin cache wrapper with a simple interface to various different caching backends and emphasising cache tagging and indexing.
Some of its features:
- Provides cache tagging and indexing -- natively and/or through emulation.
- 100% unit tested and compliant with PSR0, PSR1 and PSR2.
- Continuously integrated using PHP 5.3, 5.4, 5.5, APC, Redis, MongoDB, Sqlite, MySQL, PgSQL and Memcached.
- Available as a Composer and as a PEAR package.
Todo:
- Factory class based on PSR-6
- Rename this package.
Currently, the following cache store handlers are supported:
- APC with tagging support,
- Redis using the PhpRedis extension with tagging support,
- MongoDB using the mongo native PHP extension with tagging support,
- Memcached using the Memcached extension with indexing, tagging and namespacing support,
- and relational databases usign PDO with tagging support:
- Fully tested with SQLite, PostgreSQL and MySQL.
- Assumed to work but not tested 4D, Cubrid, MS SQL Server, Sybase, Firebird, ODBC, Interbase, IBM DB2, IDS and Oracle.
Feel free to comment, send pull requests and patches...
<?php
$cache = new Apix\Cache\Apc;
// 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');
}
return $data;
You can also use the folowing in your use cases:
// 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();
// 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 APC as a local cache
$local_cache = new Apix\Cache\Apc($options);
// additional (default) options
$options['atomicity'] = false; // false is faster, true is guaranteed
$options['serializer'] = 'php'; // null, php, igbinary and json
$redis_client = new \Redis; // instantiate phpredis*
$distributed_cache = new Apix\Cache\Redis($redis_client, $options);
* see phpredis for instantiation usage.
// 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 \MongoClient; // MongoDB native driver** instance
$cache = new Apix\Cache\Mongo($mongo, $options);
** see MongoDB for more instantiation details.
// 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'] = 'php'; // null, php, json, igbinary.
$memcached = new \Memcached; // a Memcached instance
$shared_cache = new Apix\Cache\Memcached($memcached, $options);
Note that if missing the required DB table(s) will be created on-the-fly.
// additional (default) options, specific to PDO
$options['db_table'] = 'cache'; // table to hold the cache
$options['serializer'] = 'php'; // null, php, igbinary, json
$options['format_timestamp'] = 'Y-m-d H:i:s'
// start SQLITE
$db = new \PDO('sqlite:/tmp/apix_tests.sqlite3');
$relational_cache = new Apix\Cache\Pdo\Sqlite($db, $options);
// start PGSQL
$pgsql = new \PDO('pgsql:dbname=apix_tests;host=127.0.0.1', 'postgres');
$postgres_cache = new Apix\Cache\Pdo\Postgres($pgsql, $options);
-
If you are creating a component that relies on Apix Cache locally:
-
either update your
composer.json
file:{ "require": { "apix/cache": "1.1.*" } }
-
or update your
package.xml
file as follow:<dependencies> <required> <package> <name>apix_cache</name> <channel>pear.ouarz.net</channel> <min>1.0.0</min> <max>1.999.9999</max> </package> </required> </dependencies>
-
-
For a system-wide installation using PEAR:
sudo pear channel-discover pear.ouarz.net sudo pear install --alldeps ouarz/apix_cache
For more details see pear.ouarz.net.
APIx Cache is licensed under the New BSD license -- see the LICENSE.txt
for the full license details.