Configuring Magento 2 To Use Redis Cache Backend

Using the file-system for a cache backend on a production Magento site is just asking for your site to run slowly. But what about development? Should you use a file-system based cache there or not? Well, that is ultimately up to you, but you’ll be able to work faster if you develop on a stack with a fast cache backend. My personal favorite is currently Redis. Magento supports this out of the box in later versions of Magento 1 as well as in the developer betas of Magento 2. There are added benefits such as not constantly having a slew of cache files updating and triggering backups.

I’ll assume you already have redis installed on your system, but if not, go ahead and install that on Mac OS X with a simple brew install redis or use the appropriate package manager of your preferred OS. You may want to comment out all “save” directives in the redis.conf file. Being a dev environment, I don’t care about writing the cache data to disk, and if I reboot…let it start with a clean cache database.

So how do you configure Magento 2 to use Redis? When I started digging into Magento 2 development, I couldn’t really find much on this. It’s even changed a few times since I first spent the time to figure it out. By now though, this shouldn’t change much by the time the GA hits later this year.

In your app/etc/env.php file you should find a large PHP array with settings similar to the well-known app/etc/config.xml from Magento 1. It doesn’t matter where you put the settings in here, just as long as they only appear once, and result in a syntactically correct PHP array declaration. I like to add them directly above the cache_types index.

Here is the configuration I tend to use:

  'cache' => 
  array (
    'frontend' => 
    array (
      'default' => 
      array (
        'backend' => 'Cm_Cache_Backend_Redis',
        'backend_options' => 
        array (
          'server' => '127.0.0.1',
          'port' => '6379',
          'persistent' => '',
          'database' => '0',
          'force_standalone' => '0',
          'connect_retries' => '1',
          'read_timeout' => '10',
          'automatic_cleaning_factor' => '0',
          'compress_data' => '1',
          'compress_tags' => '1',
          'compress_threshold' => '20480',
          'compression_lib' => 'gzip',
        ),
      ),
      'page_cache' => 
      array (
        'backend' => 'Cm_Cache_Backend_Redis',
        'backend_options' => 
        array (
          'server' => '127.0.0.1',
          'port' => '6379',
          'persistent' => '',
          'database' => '1',
          'force_standalone' => '0',
          'connect_retries' => '1',
          'read_timeout' => '10',
          'automatic_cleaning_factor' => '0',
          'compress_data' => '0',
          'compress_tags' => '1',
          'compress_threshold' => '20480',
          'compression_lib' => 'gzip',
        ),
      ),
    ),
  ),

If you have this setup on all your dev sites, a simple call to redis-cli flushall will clear all your caches. Handy tools like n98-magerun or bin/magento cache:flush –all in Magento 2 will also do the trick.