This week is quite a productive week and today Soflomo\Cache is released. Caching is an essential part in scaling your application, but Zend Framework 2 was missing a utility to manage your caches. Until now!

During deployments we usually flushed the cache in a tedious and cumbersome way by directly accessing the apc_* functions in a custom script. This could certainly be improved and so we wrote a command line utility to manage all our cache services.

What is a cache service?

The framework knows a concept of abstract factories. For caching, there is the StorageCacheAbstractServiceFactory. Enable the factory and you are able to define caches inside the caches key.

'caches' => array(
    'DefaultCache' => array(
        'adapter' => array(
            'name'    => 'apc',
            'options' => array(
                'namespace' => 'foobar',
            ),
        ),
    ),
),

All these caches can be used as service, for example with dependency injection:

class MyFactory implements FactoryInterface
{
    public function createService(ServiceLocator $sl)
    {
        $cache   = $sl->get('DefaultCache');
        $service = new MyService($cache);

        return $service;
    }
}

Overview of the commands

All commands are documented in the README, but here is a shortlist of the most important features:

php public/index cache --flush DefaultCache

Will completely flush the DefaultCache cache. If you have a single cache defined, you can leave the service name:

php public/index cache --flush

In the case you have multiple caches and you don't specify a single cache, Soflomo\Cache will ask which cache to flush.

9e060f37c6de9357813c867145a180c02d5ceadb

You also notice non-reversible operations (like --flush) have a confirmation dialog to confirm. You can get into non-interactive mode by using --force or -f.

Clearing by namespace (so not the complete APC cache is cleared), you can use --by-namespace:

php public/index cache --clear --by-namespace=foobar

An (in my opinion) neat add-on: Soflomo\Cache does not only handle cache services inside your application, it can also delete the merged configuration and module map.

php public/index cache --clear-config
php public/index cache --clear-module-map

But both commands only succeed if you have the options enabled in your application.config.php.

9e060f37c6de9357813c867145a180c02d5ceadb

Enjoy using the module. Currently the code is not the most beautiful piece I have ever written, but I am open for improvements!