Introduction

Butterfly uses multi-layer cache management. It's possible to use multiple caches at the same time. You can configure multiple caches and use it. Butterfly uses APC as the primary cache for the configuration files.

Default cache driver is registry on application cycle but you can use the following cache drivers:

  • Redis

  • Memcached

  • Apc

  • Database

When you check Redis and other cache implementations you will see that it's written to make developer comfortable whether you are using Redis or Memcached. We have built a system with same behaviours independent from which driver you use.

Configuration

Butterfly Cache Implementation usages are similar to Butterfly Database implementation.

The cache configurations are stored in app/config/cache.php. Configurations can be customized by domain name with subfolders.

Redis

Before enable redis cache, please check predis/predis package installed.

Example configuration:

<?php

return [
    'default' => 'backend', // default cache
    
    'backend' => [
        'adapter' => 'Redis',
        'server' => [ 
            'scheme' => 'tcp',
            'host'   => '10.0.0.1',
            'port'   => 6379,
        ],
        'password' => 'SECRET_PASSWORD',
        'prefix' => 'be:',
        'database' => 10,    
    ],
    
    'frontend' => [
        'adapter' => 'Redis',
        'server' => 'tcp://10.0.0.1:6379',
        'prefix' => 'fe:',
        'password' => 'SECRET_PASSWORD',
        'database' => 10,     
    ],
    
    'external' => [
        'adapter' => 'Redis',
        'server' => [
            'scheme' => 'tcp',
            'host'   => '1.1.1.1',
            'port'   => 6379,
        ],
        'prefix' => null,
        'password' => 'SECRET_PASSWORD',
        'database' => 0,     
    ],
];

[!TIP] Further information for parameters and options, please read predis/predis documentation

Database

Database cache needs to database_cache table. You can use following migration to create the table.

db()->schema('database_cache')->object(function(\Butterfly\Framework\Data\ButterflyObject $object) {
    $object->setDescription('Butterfly Database Cache');
    $object->string('cache_key', 'Cache Key');
    $object->textarea('value', 'Value');
    $object->integer('expire', 'Expire In Seconds');
    $object->datetimeMysql('created_at');
    $object->unique(['cache_key']);
    return $object;
});

Example configuration for database:

return [
    // other cache configurations in cache.php

    'foo' => [ 
        'driver' => 'Database',
        'prefix' => 'docs:'
    ]
];

Sample usage for the configuration:

cache('foo');

Memcached

Before enable memcached cache, please check memcached pecl package installed and enabled.

Example configuration for memcached:

return [
    // other cache configurations in cache.php

    'bar' => [ 
        'driver' => 'Memcached',
        'servers' => [
            ['127.0.0.1', 11211]
        ],
        'prefix' => 'docs:'
    ]
];

Sample usage for the configuration:

cache('bar');

Apc

Before enable apc cache, please check apc pecl package installed and enabled.

Example configuration for apc:

return [
    // other cache configurations in cache.php

    'baz' => [ 
        'driver' => 'Apc',
        'prefix' => 'docs:'
    ]
];

Sample usage for the configuration:

cache('baz');

Using The Cache Client

Cache client can be reached using cache() helper. You can also reach defined cache drivers using the cache alias as the first parameter.

cache(); // Cache Driver defaults to default cache configuration.

Following function call will return a cache client connected to cache external defined in configuration.

cache('external');

Cache Operations

GET

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

SET

$value = 'bar';
cache()
    ->set('foo', 'bar');

DELETE

cache()
    ->delete('foo');

INCREMENT

Increment cached values with optional step amount.

cache()
    ->increment('foo', 1);

DECREMENT

Decrement cached values with optional step amount.

cache()
    ->decrement('foo', 1);

FLUSH

To clear all cache, use flush method to flush related cache source.

cache()
    ->flush();

Last updated