Use Redis for session storage
Prerequisite
If Redis will be used for default or page caching, you must install Redis before continuing. .
Configure Magento to use Redis for session storage
Magento now provides command line options to configure Redis session storage. In previous releases, you edited the <Magento install dir>app/etc/env.php
file. The command line provides validation and is the recommended configuration method, but you can still edit the env.php
file.
Run the setup:config:set
command and specify Redis-specific parameters.
bin/magento setup:config:set --session-save=redis --session-save-redis-<parameter_name>=<parameter_value>...
where
--session-save=redis
enables Redis session storage. If this feature has already been enabled, omit this parameter.
--session-save-redis-<parameter_name>=<parameter_value>
is a list of parameter/value pairs that configure session storage:
Command line Parameter | Parameter name | Meaning | Default value |
---|---|---|---|
session-save-redis-host | host |
Fully qualified host name, IP address, or absolute path if using UNIX sockets. |
localhost |
session-save-redis-port | port | Redis server listen port. | 6379 |
session-save-redis-password | password | Specifies a password if your Redis server requires authentication. | empty |
session-save-redis-timeout | timeout |
Connection timeout, in seconds. |
2.5 |
session-save-redis-persistent-id | persistent_identifier |
Unique string to enable persistent connections (for example, |
empty |
session-save-redis-db | database |
Unique Redis database number, which is recommended to protect against data loss. Important: If you use Redis for more than one type of caching, the database numbers must be different. It is recommended that you assign the default caching database number to 0, the page caching database number to 1, and the session storage database number to 2. |
0 |
session-save-redis-compression-threshold | compression_threshold |
Set to |
2048 |
session-save-redis-compression-lib | compression_library | Options: gzip , lzf , lz4 or snappy . |
gzip |
session-save-redis-log-level | log_level |
Set to any of the following, listed in order from least verbose to most verbose:
|
1 |
session-save-redis-max-concurrency | max_concurrency |
Maximum number of processes that can wait for a lock on one session. For large production clusters, set this to at least 10% of the number of PHP processes. |
6 |
session-save-redis-break-after-frontend | break_after_frontend |
Number of seconds to wait before trying to break the lock for frontend (that is, storefront) session. |
5 |
session-save-redis-break-after-adminhtml | break_after_adminhtml |
Number of seconds to wait before trying to break the lock for an adminhtml (that is, Magento Admin) session. |
30 |
session-save-redis-first-lifetime | first_lifetime |
Lifetime, in seconds, of session for non-bots on the first write, or use |
600 |
session-save-redis-bot-first-lifetime | bot_first_lifetime |
Lifetime, in seconds, of session for bots on the first write, or use |
60 |
session-save-redis-bot-lifetime | bot_lifetime |
Lifetime, in seconds, of session for bots on subsequent writes, or use |
7200 |
session-save-redis-disable-locking | disable_locking |
Disable session locking entirely. |
0 (false) |
session-save-redis-min-lifetime | min_lifetime |
Minimum session lifetime, in seconds. |
60 |
session-save-redis-max-lifetime | max_lifetime |
Maximum session lifetime, in seconds. |
2592000 (720 hours) |
session-save-redis-sentinel-master | sentinel_master |
Redis Sentinel master name |
empty |
session-save-redis-sentinel-servers | sentinel_servers |
List of Redis Sentinel servers, comma separated |
empty |
session-save-redis-sentinel-verify-master | sentinel_verify_master |
Verify Redis Sentinel master status flag |
0 (false) |
session-save-redis-sentinel-connect-retires | sentinel_connect_retries |
Connection retries for sentinels |
5 |
Example command
The following example sets Redis as the session data store, sets the host to redis.example.com
, sets the log level to 3, and sets the datbase number to 2. All other parameters are set to the default value.
bin/magento setup:config:set --session-save=redis --session-save-redis-host=redis.example.com --session-save-redis-log-level=3 --session-save-redis-db=2
Result
Magento adds lines similar to the following to <your Magento install dir>app/etc/env.php
:
'session' =>
array (
'save' => 'redis',
'redis' =>
array (
'host' => 'redis.example.com',
'port' => '6379',
'password' => '',
'timeout' => '2.5',
'persistent_identifier' => '',
'database' => '2',
'compression_threshold' => '2048',
'compression_library' => 'gzip',
'log_level' => '3',
'max_concurrency' => '6',
'break_after_frontend' => '5',
'break_after_adminhtml' => '30',
'first_lifetime' => '600',
'bot_first_lifetime' => '60',
'bot_lifetime' => '7200',
'disable_locking' => '0',
'min_lifetime' => '60',
'max_lifetime' => '2592000'
)
),
Basic verification
To verify that Redis and Magento are working together, use the following commands:
Redis monitor command
In a command prompt on the server on which Redis is running, enter:
redis-cli monitor
Refresh your storefront page and you’ll see output similar to the following.
Session storage
If you use Redis for session storage, you’ll see output similar to the following:
1476824834.187250 [0 127.0.0.1:52353] "select" "0"
1476824834.187587 [0 127.0.0.1:52353] "hmget" "sess_sgmeh2k3t7obl2tsot3h2ss0p1" "data" "writes"
1476824834.187939 [0 127.0.0.1:52353] "expire" "sess_sgmeh2k3t7obl2tsot3h2ss0p1" "1200"
1476824834.257226 [0 127.0.0.1:52353] "select" "0"
1476824834.257239 [0 127.0.0.1:52353] "hmset" "sess_sgmeh2k3t7obl2tsot3h2ss0p1" "data" "_session_validator_data|a:4:{s:11:\"remote_addr\";s:12:\"10.235.34.14\";s:8:\"http_via\";s:0:\"\";s:20:\"http_x_forwarded_for\";s:0:\"\";s:15:\"http_user_agent\";s:115:\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\";}_session_hosts|a:1:{s:12:\"10.235.32.10\";b:1;}admin|a:0:{}default|a:2:{s:9:\"_form_key\";s:16:\"e331ugBN7vRjGMgk\";s:12:\"visitor_data\";a:3:{s:13:\"last_visit_at\";s:19:\"2016-10-18 21:06:37\";s:10:\"session_id\";s:26:\"sgmeh2k3t7obl2tsot3h2ss0p1\";s:10:\"visitor_id\";s:1:\"9\";}}adminhtml|a:0:{}customer_base|a:1:{s:20:\"customer_segment_ids\";a:1:{i:1;a:0:{}}}checkout|a:0:{}" "lock" "0"
... more ...
Page caching
If you use Redis for page caching, you’ll see output similar to the following:
1476826133.810090 [0 127.0.0.1:52366] "select" "1"
1476826133.816293 [0 127.0.0.1:52367] "select" "0"
1476826133.817461 [0 127.0.0.1:52367] "hget" "zc:k:ea6_GLOBAL__DICONFIG" "d"
1476826133.829666 [0 127.0.0.1:52367] "hget" "zc:k:ea6_DICONFIG049005964B465901F774DB9751971818" "d"
1476826133.837854 [0 127.0.0.1:52367] "hget" "zc:k:ea6_INTERCEPTION" "d"
1476826133.868374 [0 127.0.0.1:52368] "select" "1"
1476826133.869011 [0 127.0.0.1:52369] "select" "0"
1476826133.869601 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DEFAULT_CONFIG_CACHE_DEFAULT__10__235__32__1080MAGENTO2" "d"
1476826133.872317 [0 127.0.0.1:52369] "hget" "zc:k:ea6_INITIAL_CONFIG" "d"
1476826133.879267 [0 127.0.0.1:52369] "hget" "zc:k:ea6_GLOBAL_PRIMARY_PLUGIN_LIST" "d"
1476826133.883312 [0 127.0.0.1:52369] "hget" "zc:k:ea6_GLOBAL__EVENT_CONFIG_CACHE" "d"
1476826133.898431 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DB_PDO_MYSQL_DDL_STAGING_UPDATE_1" "d"
1476826133.898794 [0 127.0.0.1:52369] "hget" "zc:k:ea6_RESOLVED_STORES_D1BEFA03C79CA0B84ECC488DEA96BC68" "d"
1476826133.905738 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DEFAULT_CONFIG_CACHE_STORE_DEFAULT_10__235__32__1080MAGENTO2" "d"
... more ...
1476826210.634998 [0 127.0.0.1:52439] "hmset" "zc:k:ea6_MVIEW_CONFIG" "d" "a:18:{s:19:\"design_config_dummy\";a:4:{s:7:\"view_id\";s:19:\"design_config_dummy\";s:12:\"action_class\";s:39:\"Magento\\Theme\\Model\\Indexer\\Mview\\Dummy\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:0:{}}s:14:\"customer_dummy\";a:4:{s:7:\"view_id\";s:14:\"customer_dummy\";s:12:\"action_class\";s:42:\"Magento\\Customer\\Model\\Indexer\\Mview\\Dummy\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:0:{}}s:13:\"cms_page_grid\";a:4:{s:7:\"view_id\";s:13:\"cms_page_grid\";s:12:\"action_class\";s:43:\"Magento\\Catalog\\Model\\Indexer\\Category\\Flat\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:1:{s:8:\"cms_page\";a:3:{s:4:\"name\";s:8:\"cms_page\";s:6:\"column\";s:7:\"page_id\";s:18:\"subscription_model\";N;}}}s:21:\"catalog_category_flat\";a:4:{s:7:\"view_id\";s:21:\"catalog_category_flat\";s:12:\"action_class\";s:43:\"Magento\\Catalog\\Model\\Indexer\\Category\\Flat\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:6:{s:23:\"catalog_category_entity\";a:3:{s:4:\"name\";s:23:\"catalog_category_entity\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";N;}s:31:\"catalog_category_entity_decimal\";a:3:{s:4:\"name\";s:31:\"catalog_category_entity_decimal\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:27:\"catalog_category_entity_int\";a:3:{s:4:\"name\";s:27:\"catalog_category_entity_int\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:28:\"catalog_category_entity_text\";a:3:{s:4:\"name\";s:28:\"catalog_category_entity_text\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:31:\"catalog_category_entity_varchar\";a:3:{s:4:\"name\";s:31:\"catalog_category_entity_varchar\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:32:\"catalog_category_entity_datetime\";a:3:{s:4:\"name\";s:32:\"catalog_category_entity_datetime\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}}}s:24:\"catalog_category_product\";a:4:{s:7:\"view_id\";s:24:\"catalog_category_product\";s:12:\"action_class\";s:46:\"Magento\\Catalog\\Model\\Indexer\\Category\\Product\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:2:{s:23:\"catalog_category_entity\";a:3:{s:4:\"name\";s:23:\"catalog_category_entity\";s:6:\"column\"
... more ...
Redis ping command
Enter the following command:
redis-cli ping
PONG
should be the response.
If both commands succeeded, Redis is set up properly.