Add some documentation to the README
This commit is contained in:
parent
3728a1f4f4
commit
b639c5ce87
68
README.md
68
README.md
@ -1,3 +1,69 @@
|
|||||||
# Banker
|
# Banker
|
||||||
|
|
||||||
A Caching library implementing the PSR-6 interface for several common cache backends
|
A Caching library implementing the PSR-6 interface for several common cache
|
||||||
|
backends
|
||||||
|
|
||||||
|
## Cache Backends
|
||||||
|
* Memcache
|
||||||
|
* Memcached
|
||||||
|
* Redis
|
||||||
|
* Null - no persistence
|
||||||
|
|
||||||
|
### Basic Usage
|
||||||
|
```php
|
||||||
|
// Create the pool
|
||||||
|
$pool = new Aviat\Banker\Pool($config, $logger);
|
||||||
|
|
||||||
|
// Grab an item from the cache
|
||||||
|
$item = $pool->getItem('foo');
|
||||||
|
|
||||||
|
// Was there a cache hit?
|
||||||
|
if ( ! $item->isHit())
|
||||||
|
{
|
||||||
|
// ... Generation of value to cache
|
||||||
|
$item->set($value);
|
||||||
|
$item->save();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$value = $item->get();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Configuration / Connection array
|
||||||
|
|
||||||
|
The config array passed to the Pool class constructor determines
|
||||||
|
which server to connect to. Regardless of the backend, the basic
|
||||||
|
structure is like so:
|
||||||
|
|
||||||
|
```php
|
||||||
|
[
|
||||||
|
'driver' => 'null', // null, redis, memcache, memcached
|
||||||
|
'connection' => [
|
||||||
|
// driver setup, see below for the structure for each
|
||||||
|
// driver
|
||||||
|
],
|
||||||
|
'options' => [
|
||||||
|
// Optional:
|
||||||
|
// Set additional driver-specific options, like persistence for
|
||||||
|
// Memcached, or a prefix for Redis keys
|
||||||
|
]
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
Below are the connection arrays for each backend:
|
||||||
|
|
||||||
|
Memcache / Memcached:
|
||||||
|
```php
|
||||||
|
[
|
||||||
|
'host' => 'localhost', // hostname or socket
|
||||||
|
'port' => 11211, // Port needs to be 0 if socket
|
||||||
|
'persistent' => false, // Use persistent connection
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
Redis:
|
||||||
|
See [Predis](https://github.com/nrk/predis#connecting-to-redis) documentation. An empty array will connect to localhost on port 6379.
|
||||||
|
|
||||||
|
Null:
|
||||||
|
No connection parameters
|
@ -22,7 +22,7 @@ use Psr\Log\LoggerAwareInterface;
|
|||||||
* Base class for cache backends
|
* Base class for cache backends
|
||||||
*/
|
*/
|
||||||
abstract class AbstractDriver implements DriverInterface, LoggerAwareInterface {
|
abstract class AbstractDriver implements DriverInterface, LoggerAwareInterface {
|
||||||
|
|
||||||
use \Aviat\Banker\LoggerTrait;
|
use \Aviat\Banker\LoggerTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,7 +31,7 @@ abstract class AbstractDriver implements DriverInterface, LoggerAwareInterface {
|
|||||||
* @var mixed
|
* @var mixed
|
||||||
*/
|
*/
|
||||||
protected $conn;
|
protected $conn;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data to be stored later
|
* Data to be stored later
|
||||||
*
|
*
|
||||||
@ -43,9 +43,10 @@ abstract class AbstractDriver implements DriverInterface, LoggerAwareInterface {
|
|||||||
* Common constructor interface for driver classes
|
* Common constructor interface for driver classes
|
||||||
*
|
*
|
||||||
* @param array $config - Connection parameters for the specified backend
|
* @param array $config - Connection parameters for the specified backend
|
||||||
|
* @param array $options - Special connection options for the specified backend
|
||||||
*/
|
*/
|
||||||
abstract public function __construct(array $config = []);
|
abstract public function __construct(array $config = [], array $options = []);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common destructor
|
* Common destructor
|
||||||
*/
|
*/
|
||||||
|
@ -27,9 +27,10 @@ class MemcacheDriver extends AbstractDriver {
|
|||||||
* Driver for PHP Memcache extension
|
* Driver for PHP Memcache extension
|
||||||
*
|
*
|
||||||
* @param array $config
|
* @param array $config
|
||||||
|
* @param array $options
|
||||||
* @throws CacheException
|
* @throws CacheException
|
||||||
*/
|
*/
|
||||||
public function __construct(array $config = [])
|
public function __construct(array $config = [], array $options = [])
|
||||||
{
|
{
|
||||||
// @codeCoverageIgnoreStart
|
// @codeCoverageIgnoreStart
|
||||||
if ( ! class_exists('Memcache'))
|
if ( ! class_exists('Memcache'))
|
||||||
|
@ -30,9 +30,10 @@ class MemcachedDriver extends AbstractDriver {
|
|||||||
* Driver for PHP Memcache extension
|
* Driver for PHP Memcache extension
|
||||||
*
|
*
|
||||||
* @param array $config
|
* @param array $config
|
||||||
|
* @param array $options
|
||||||
* @throws CacheException
|
* @throws CacheException
|
||||||
*/
|
*/
|
||||||
public function __construct(array $config = [])
|
public function __construct(array $config = [], array $options = [])
|
||||||
{
|
{
|
||||||
// @codeCoverageIgnoreStart
|
// @codeCoverageIgnoreStart
|
||||||
if ( ! class_exists('Memcached'))
|
if ( ! class_exists('Memcached'))
|
||||||
@ -46,8 +47,13 @@ class MemcachedDriver extends AbstractDriver {
|
|||||||
$this->conn = new Memcached();
|
$this->conn = new Memcached();
|
||||||
$this->conn->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
|
$this->conn->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
|
||||||
$this->conn->addServer($config['host'], $config['port']);
|
$this->conn->addServer($config['host'], $config['port']);
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
if ( ! empty($options))
|
||||||
|
{
|
||||||
|
$this->conn->setOptions($options);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// @codeCoverageIgnoreStart
|
|
||||||
catch (MemcachedException $e)
|
catch (MemcachedException $e)
|
||||||
{
|
{
|
||||||
// Rewrite MemcachedException as a CacheException to
|
// Rewrite MemcachedException as a CacheException to
|
||||||
|
@ -34,12 +34,13 @@ class NullDriver extends AbstractDriver {
|
|||||||
* NullDriver constructor.
|
* NullDriver constructor.
|
||||||
*
|
*
|
||||||
* @param array $config
|
* @param array $config
|
||||||
|
* @param array $options
|
||||||
*/
|
*/
|
||||||
public function __construct(array $config = [])
|
public function __construct(array $config = [], array $options = [])
|
||||||
{
|
{
|
||||||
$this->store = [];
|
$this->store = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clean up nothing
|
* Clean up nothing
|
||||||
*/
|
*/
|
||||||
@ -67,8 +68,8 @@ class NullDriver extends AbstractDriver {
|
|||||||
*/
|
*/
|
||||||
public function get($key)
|
public function get($key)
|
||||||
{
|
{
|
||||||
return ($this->exists($key))
|
return ($this->exists($key))
|
||||||
? $this->store[$key]
|
? $this->store[$key]
|
||||||
: NULL;
|
: NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +145,7 @@ class NullDriver extends AbstractDriver {
|
|||||||
$this->store = [];
|
$this->store = [];
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the specified key to expire at the given time
|
* Set the specified key to expire at the given time
|
||||||
*
|
*
|
||||||
|
@ -35,9 +35,10 @@ class RedisDriver extends AbstractDriver {
|
|||||||
* RedisDriver constructor.
|
* RedisDriver constructor.
|
||||||
*
|
*
|
||||||
* @param array $config
|
* @param array $config
|
||||||
|
* @param array $options - Predis library connection options
|
||||||
* @throws CacheException
|
* @throws CacheException
|
||||||
*/
|
*/
|
||||||
public function __construct(array $config = [])
|
public function __construct(array $config = [], array $options = [])
|
||||||
{
|
{
|
||||||
// @codeCoverageIgnoreStart
|
// @codeCoverageIgnoreStart
|
||||||
if ( ! class_exists('Predis\\Client'))
|
if ( ! class_exists('Predis\\Client'))
|
||||||
@ -46,7 +47,7 @@ class RedisDriver extends AbstractDriver {
|
|||||||
}
|
}
|
||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
|
|
||||||
$this->conn = new Client($config);
|
$this->conn = new Client($config, $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
21
src/Pool.php
21
src/Pool.php
@ -30,7 +30,7 @@ use Aviat\Banker\ItemCollection;
|
|||||||
* The main cache manager
|
* The main cache manager
|
||||||
*/
|
*/
|
||||||
class Pool implements CacheItemPoolInterface, LoggerAwareInterface {
|
class Pool implements CacheItemPoolInterface, LoggerAwareInterface {
|
||||||
|
|
||||||
use LoggerTrait;
|
use LoggerTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -55,7 +55,7 @@ class Pool implements CacheItemPoolInterface, LoggerAwareInterface {
|
|||||||
public function __construct(array $config, LoggerInterface $logger = NULL)
|
public function __construct(array $config, LoggerInterface $logger = NULL)
|
||||||
{
|
{
|
||||||
$this->driver = $this->loadDriver($config);
|
$this->driver = $this->loadDriver($config);
|
||||||
|
|
||||||
if ( ! is_null($logger))
|
if ( ! is_null($logger))
|
||||||
{
|
{
|
||||||
$this->setLogger($logger);
|
$this->setLogger($logger);
|
||||||
@ -84,7 +84,7 @@ class Pool implements CacheItemPoolInterface, LoggerAwareInterface {
|
|||||||
{
|
{
|
||||||
throw new InvalidArgumentException();
|
throw new InvalidArgumentException();
|
||||||
}
|
}
|
||||||
|
|
||||||
// If a deferred item exists, return that
|
// If a deferred item exists, return that
|
||||||
if (array_key_exists($key, $this->deferred))
|
if (array_key_exists($key, $this->deferred))
|
||||||
{
|
{
|
||||||
@ -117,7 +117,7 @@ class Pool implements CacheItemPoolInterface, LoggerAwareInterface {
|
|||||||
{
|
{
|
||||||
return new ItemCollection([]);
|
return new ItemCollection([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($keys as $key)
|
foreach($keys as $key)
|
||||||
{
|
{
|
||||||
if ( ! is_string($key))
|
if ( ! is_string($key))
|
||||||
@ -125,7 +125,7 @@ class Pool implements CacheItemPoolInterface, LoggerAwareInterface {
|
|||||||
throw new InvalidArgumentException();
|
throw new InvalidArgumentException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the set of items selected
|
// Get the set of items selected
|
||||||
$items = [];
|
$items = [];
|
||||||
$rawItems = $this->driver->getMultiple($keys);
|
$rawItems = $this->driver->getMultiple($keys);
|
||||||
@ -167,7 +167,7 @@ class Pool implements CacheItemPoolInterface, LoggerAwareInterface {
|
|||||||
{
|
{
|
||||||
throw new InvalidArgumentException();
|
throw new InvalidArgumentException();
|
||||||
}
|
}
|
||||||
|
|
||||||
// See if there are any deferred items
|
// See if there are any deferred items
|
||||||
if (array_key_exists($key, $this->deferred))
|
if (array_key_exists($key, $this->deferred))
|
||||||
{
|
{
|
||||||
@ -292,7 +292,7 @@ class Pool implements CacheItemPoolInterface, LoggerAwareInterface {
|
|||||||
{
|
{
|
||||||
$result = $result && $this->save($item);
|
$result = $result && $this->save($item);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result === TRUE)
|
if ($result === TRUE)
|
||||||
{
|
{
|
||||||
$this->deferred = [];
|
$this->deferred = [];
|
||||||
@ -312,6 +312,11 @@ class Pool implements CacheItemPoolInterface, LoggerAwareInterface {
|
|||||||
$driver = ucfirst(strtolower($driverConfig['driver']));
|
$driver = ucfirst(strtolower($driverConfig['driver']));
|
||||||
$class = __NAMESPACE__ . "\\Driver\\${driver}Driver";
|
$class = __NAMESPACE__ . "\\Driver\\${driver}Driver";
|
||||||
|
|
||||||
return new $class($driverConfig['connection']);
|
if ( ! array_key_exists('options', $driverConfig))
|
||||||
|
{
|
||||||
|
$driverConfig['options'] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return new $class($driverConfig['connection'], $driverConfig['options']);
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user