L2 caching in the Magento application

Caching allows us to reduce network traffic between the remote cache storage and Magento. A standard Magento instance transfers around 300kb per request, and traffic may quickly grow to over ~1000 requests in some situations.

To reduce the network bandwidth to Redis, we can store cache data locally on each web node and use the remote cache for two purposes:

  • To check the cache data version, ensuring we have the latest cache stored locally.
  • If the data is out of date, transfer the latest cache from the remote machine to the local machine.

Magento stores the hashed data version in Redis, with the suffix ‘:version’ appended to the regular key. In case of an outdated local cache, we tranfer the data to the local machine with a cache adapter.

Configuration example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
'cache' => [
    [
        'default' => [
             'backend' => '\\Magento\\Framework\\Cache\\Backend\\RemoteSynchronizedCache',
             'backend_options' => [
                 'remote_backend' => '\\Magento\\Framework\\Cache\\Backend\\Redis',
                 'remote_backend_options' => [
                     'persistent' => 0,
                     'server' => 'localhost',
                     'database' => '0',
                     'port' => '6370',
                     'password' => '',
                     'compress_data' => '1',
                 ],
                 'local_backend' => 'Cm_Cache_Backend_File',
                 'local_backend_options' => [
                     'cache_dir' => '/dev/shm/'
                 ]
             ],
             'frontend_options' => [
                 'write_control' => false,
             ],
         ]
    ],
    'type' => [
        'default' => ['frontend' => 'default'],
    ],
]

Where:

  • backend is our remote L2 cache implementation.
  • remote_backend is the remote cache implementation: Redis or MySQL.
  • remote_backend_options are Redis or MySQL-specific options.
  • local_backend is the local cache implementation: Cm_Cache_Backend_File or the APC adapter

We recommend the use of Redis for remote caching - \Magento\Framework\Cache\Backend\Redis, and the File cache implementation - Cm_Cache_Backend_File as the local cache. We also recommend the use of the cache preload feature, as it will drastically decrease the pressure on Redis.