Implements: Kohana_Cache_Arithmetic | Cache_Arithmetic
Kohana Cache APCu data store driver for Kohana Cache library.
Below is an example of an apcu server configuration.
return [
// Driver group
'apcu' => [
// Using APCu driver
'driver' => 'apcu',
],
];
In cases where only one cache group is required, if the group is named default
there is
no need to pass the group name when instantiating a cache instance.
Below are the settings available to all types of cache driver.
Name | Required | Description |
---|---|---|
driver | YES | (string) The driver type to use |
Class declared in MODPATH/cache/classes/Cache/Apcu.php on line 3.
integer 3600
string
$defaultdefault driver to use
string(4) "file"
Kohana_Cache
$instancesinstances
array(0)
Config
$_configarray(0)
Decrements a given value by the step value supplied. Useful for shared counters and other persistent integer based tracking.
string
$id
required - Id of cache entry to decrement int
$step
= integer 1 - Step value to decrement by integer
boolean
public function decrement($id, $step = 1)
{
if (apcu_exists($id)) {
return apcu_dec($id, $step);
} else {
return false;
}
}
Delete a cache entry based on id
// Delete 'foo' entry from the apcu group
Cache::instance('apcu')->delete('foo');
string
$id
required - Id to remove from cache boolean
public function delete($id)
{
return apcu_delete($this->_sanitize_id($id));
}
Delete all cache entries.
Beware of using this method when using shared memory cache systems, as it will wipe every entry within the system for all clients.
// Delete all cache entries in the apcu group
Cache::instance('apcu')->delete_all();
boolean
public function delete_all()
{
return apcu_clear_cache();
}
Retrieve a cached value entry by id.
// Retrieve cache entry from apcu group
$data = Cache::instance('apcu')->get('foo');
// Retrieve cache entry from apcu group and return 'bar' if miss
$data = Cache::instance('apcu')->get('foo', 'bar');
string
$id
required - Id of cache to entry string
$default
= NULL - Default value to return if cache miss mixed
public function get($id, $default = null)
{
$data = apcu_fetch($this->_sanitize_id($id), $success);
return $success ? $data : $default;
}
Increments a given value by the step value supplied. Useful for shared counters and other persistent integer based tracking.
string
$id
required - Id of cache entry to increment int
$step
= integer 1 - Step value to increment by integer
boolean
public function increment($id, $step = 1)
{
if (apcu_exists($id)) {
return apcu_inc($id, $step);
} else {
return false;
}
}
Set a value to cache with id and lifetime
$data = 'bar';
// Set 'bar' to 'foo' in apcu group, using default expiry
Cache::instance('apcu')->set('foo', $data);
// Set 'bar' to 'foo' in apcu group for 30 seconds
Cache::instance('apcu')->set('foo', $data, 30);
string
$id
required - Id of cache entry string
$data
required - Data to set to cache integer
$lifetime
= NULL - Lifetime in seconds boolean
public function set($id, $data, $lifetime = null)
{
if ($lifetime === null) {
$lifetime = Arr::get($this->_config, 'default_expire', Cache::DEFAULT_EXPIRE);
}
return apcu_store($this->_sanitize_id($id), $data, $lifetime);
}
Overload the __clone() method to prevent cloning
void
final public function __clone()
{
throw new Cache_Exception('Cloning of Kohana_Cache objects is forbidden');
}
Getter and setter for the configuration. If no argument provided, the current configuration is returned. Otherwise the configuration is set to this class.
// Overwrite all configuration
$cache->config(['driver' => 'memcache', '...']);
// Set a new configuration setting
$cache->config('servers', ['foo' => 'bar', '...']);
// Get a configuration setting
$servers = $cache->config('servers);
mixed
$key
= NULL - Key to set to array, either array or config path mixed
$value
= NULL - Value to associate with key mixed
public function config($key = null, $value = null)
{
if ($key === null)
return $this->_config;
if (is_array($key)) {
$this->_config = $key;
} else {
if ($value === null)
return Arr::get($this->_config, $key);
$this->_config[$key] = $value;
}
return $this;
}
Creates a singleton of a Kohana Cache group. If no group is supplied the default cache group is used.
// Create an instance of the default group
$default_group = Cache::instance();
// Create an instance of a group
$foo_group = Cache::instance('foo');
// Access an instantiated group directly
$foo_group = Cache::$instances['default'];
string
$group
= NULL - The name of the cache group to use [Optional] Cache
public static function instance($group = null)
{
// If there is no group supplied
if ($group === null) {
// Use the default setting
$group = Cache::$default;
}
if (isset(Cache::$instances[$group])) {
// Return the current group if initiated already
return Cache::$instances[$group];
}
$config = Kohana::$config->load('cache');
if (!$config->offsetExists($group)) {
throw new Cache_Exception('Failed to load Kohana Cache group: :group', [':group' => $group]);
}
$config = $config->get($group);
// Create a new cache type instance
$cache_class = 'Cache_' . ucfirst($config['driver']);
Cache::$instances[$group] = new $cache_class($config);
// Return the instance
return Cache::$instances[$group];
}
Check for existence of the APCu extension This method cannot be invoked externally. The driver must
be instantiated using the Cache::instance()
method.
array
$config
required - Configuration protected function __construct(array $config)
{
if (!extension_loaded('apcu')) {
throw new Cache_Exception('PHP APCu extension is not available.');
}
parent::__construct($config);
}
Replaces troublesome characters with underscores.
// Sanitize a cache id
$id = $this->_sanitize_id($id);
string
$id
required - Id of cache to sanitize string
protected function _sanitize_id($id)
{
// Change slashes and spaces to underscores
return str_replace(['/', '\\', ' '], '_', $id);
}