W3cubDocs

/CodeIgniter 4

Caching Driver

CodeIgniter features wrappers around some of the most popular forms of fast and dynamic caching. All but file-based caching require specific server requirements, and a Fatal Exception will be thrown if server requirements are not met.

Example Usage

The following example shows a common usage pattern within your controllers.

if ( ! $foo = cache('foo'))
{
        echo 'Saving to the cache!<br />';
        $foo = 'foobarbaz!';

        // Save into the cache for 5 minutes
        cache()->save('foo', $foo, 300);
}

echo $foo;

You can grab an instance of the cache engine directly through the Services class:

$cache = \Config\Services::cache();

$foo = $cache->get('foo');

Configuring the Cache

All configuration for the cache engine is done in app/Config/Cache.php. In that file, the following items are available.

$handler

The is the name of the handler that should be used as the primary handler when starting up the engine. Available names are: dummy, file, memcached, redis, predis, wincache.

$backupHandler

In the case that the first choice $hanlder is not available, this is the next cache handler to load. This is commonly the file handler since the file system is always available, but may not fit more complex, multi-server setups.

$prefix

If you have more than one application using the same cache storage, you can add a custom prefix here that is prepended to all key names.

$path

This is used by the file handler to show where it should save the cache files to.

$memcached

This is an array of servers that will be used when using the Memcache(d) handler.

$redis

The settings for the Redis server that you wish to use when using the Redis and Predis handler.

Class Reference

⠀isSupported()
Returns: TRUE if supported, FALSE if not
Return type: bool
⠀get($key)
Parameters:
  • $key (string) – Cache item name
Returns:

Item value or NULL if not found

Return type:

mixed

This method will attempt to fetch an item from the cache store. If the item does not exist, the method will return NULL.

Example:

$foo = $cache->get('my_cached_item');
⠀save($key, $data[, $ttl = 60[, $raw = FALSE]])
Parameters:
  • $key (string) – Cache item name
  • $data (mixed) – the data to save
  • $ttl (int) – Time To Live, in seconds (default 60)
  • $raw (bool) – Whether to store the raw value
Returns:

TRUE on success, FALSE on failure

Return type:

string

This method will save an item to the cache store. If saving fails, the method will return FALSE.

Example:

$cache->save('cache_item_id', 'data_to_cache');

Note

The $raw parameter is only utilized by Memcache, in order to allow usage of increment() and decrement().

⠀delete($key)
Parameters:
  • $key (string) – name of cached item
Returns:

TRUE on success, FALSE on failure

Return type:

bool

This method will delete a specific item from the cache store. If item deletion fails, the method will return FALSE.

Example:

$cache->delete('cache_item_id');
⠀increment($key[, $offset = 1])
Parameters:
  • $key (string) – Cache ID
  • $offset (int) – Step/value to add
Returns:

New value on success, FALSE on failure

Return type:

mixed

Performs atomic incrementation of a raw stored value.

Example:

// 'iterator' has a value of 2

$cache->increment('iterator'); // 'iterator' is now 3

$cache->increment('iterator', 3); // 'iterator' is now 6
⠀decrement($key[, $offset = 1])
Parameters:
  • $key (string) – Cache ID
  • $offset (int) – Step/value to reduce by
Returns:

New value on success, FALSE on failure

Return type:

mixed

Performs atomic decrementation of a raw stored value.

Example:

// 'iterator' has a value of 6

$cache->decrement('iterator'); // 'iterator' is now 5

$cache->decrement('iterator', 2); // 'iterator' is now 3
⠀clean()
Returns: TRUE on success, FALSE on failure
Return type: bool

This method will ‘clean’ the entire cache. If the deletion of the cache files fails, the method will return FALSE.

Example:

$cache->clean();
⠀cache_info()
Returns: Information on the entire cache database
Return type: mixed

This method will return information on the entire cache.

Example:

var_dump($cache->cache_info());

Note

The information returned and the structure of the data is dependent on which adapter is being used.

⠀getMetadata($key)
Parameters:
  • $key (string) – Cache item name
Returns:

Metadata for the cached item

Return type:

mixed

This method will return detailed information on a specific item in the cache.

Example:

var_dump($cache->getMetadata('my_cached_item'));

Note

The information returned and the structure of the data is dependent on which adapter is being used.

Drivers

File-based Caching

Unlike caching from the Output Class, the driver file-based caching allows for pieces of view files to be cached. Use this with care, and make sure to benchmark your application, as a point can come where disk I/O will negate positive gains by caching. This requires a writable cache directory to be really writable (0777).

Memcached Caching

Memcached servers can be specified in the cache configuration file. Available options are:

public $memcached = [
        'host'   => '127.0.0.1',
        'port'   => 11211,
        'weight' => 1,
        'raw'    => false,
];

For more information on Memcached, please see https://www.php.net/memcached.

WinCache Caching

Under Windows, you can also utilize the WinCache driver.

For more information on WinCache, please see https://www.php.net/wincache.

Redis Caching

Redis is an in-memory key-value store which can operate in LRU cache mode. To use it, you need Redis server and phpredis PHP extension.

Config options to connect to redis server stored in the cache configuration file. Available options are:

public $redis = [
        'host'     => '127.0.0.1',
        'password' => null,
        'port'     => 6379,
        'timeout'  => 0,
        'database' => 0,
];

For more information on Redis, please see https://redis.io.

Predis Caching

Predis is a flexible and feature-complete PHP client library for the Redis key-value store. To use it, from the command line inside your project root:

composer require predis/predis

For more information on Redis, please see https://github.com/nrk/predis.

Dummy Cache

This is a caching backend that will always ‘miss.’ It stores no data, but lets you keep your caching code in place in environments that don’t support your chosen cache.

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide4/libraries/caching.html