Konfigurera Redis för standard- och sidcache

Commerce tillhandahåller kommandoradsalternativ för att konfigurera Redis-sidan och standardcachning. Även om du kan konfigurera cachelagring genom att redigera filen <Commerce-install-dir>app/etc/env.php, är kommandoraden den rekommenderade metoden, särskilt för initiala konfigurationer. Kommandoraden innehåller validering som säkerställer att konfigurationen är syntaktiskt korrekt.

Förutsättning:

Installera Redis innan du fortsätter.

NOTE
För Commerce-instanser som finns på EC2 kan du använda AWS ElastiCache i stället för en lokal Redis-instans. Se Konfigurera elasticache för EC2-instanser.

Ramverk som stöds

Zend Cache (2.4.8 och tidigare)
  • Zend Cache (2.4.8 och tidigare) - Legacy Redis-serverdel för Commerce 2.4.8 och tidigare:

    • Äldre Redis-serverdel - Använder hela klassökvägen (Magento\Framework\Cache\Backend\Redis)
    • Förinläsningsnycklar - Stöder förinläsning av cachenycklar som används ofta
    • Lua-skript - Lua för skräpinsamling
    • Komprimering - Stöder datakomprimering
Symfony Cache (2.4.9+)
  • Symfony Cache (2.4.9+) - Från och med Commerce 2.4.9 har Symfony Cache en modern, PSR-6-kompatibel cacheimplementering för Redis med betydande prestandaförbättringar:

    • Automatisk Redis-pipeline - Batchar flera åtgärder till en enda begäran, vilket minskar latensen
    • PSR-6 TagAwareAdapter - Effektiv taggbaserad cacheogiltigförklaring med atomära åtgärder
    • Igbinär serialisering - Binär serialisering minskar storleken på cacheposten med 45 % och ökar hastigheten med 5-10 %
    • Förbättrade beständiga anslutningar - stabilare anslutningspoolning med bättre hantering av förankrade processer
    • Optimerade Lua-skript - Körning på serversidan kombinerat med rörledning för maximal effektivitet

Konfigurera standardcachning för Redis

Kör kommandot setup:config:set och ange parametrar som är specifika för Redis standardcachning.

bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-<parameter>=<value>...

Med följande parametrar:

  • --cache-backend=redis aktiverar Redis standardcachning. Om den här funktionen redan har aktiverats utelämnar du den här parametern.

  • --cache-backend-redis-<parameter>=<value> är en lista med nyckel-och-värde-par som konfigurerar standardcachelagring:

Kommandoradsparameter
Värde
Betydelse
Standardvärde
cache-backend-redis-server
server
Fullständigt kvalificerat värdnamn, IP-adress eller absolut sökväg till en UNIX-socket. Standardvärdet 127.0.0.1 anger att Redis är installerat på Commerce-servern.
127.0.0.1
cache-backend-redis-port
port
Redis-serverlyssningsport
6379
cache-backend-redis-db
databas
Krävs om du använder Redis för både standardcache och helsidescache. Ange databasnumret för en av cacherna. det andra cacheminnet använder 0 som standard.

Viktigt: Om du använder Redis för mer än en typ av cachning måste databasnumren vara olika. Vi rekommenderar att du tilldelar standardvärdet för cachningsdatabasen till 0, sidcachningsdatabasnumret till 1 och sessionslagringsdatabasnumret till 2.
0
cache-backend-redis-password
lösenord
När du konfigurerar ett Redis-lösenord aktiveras en av de inbyggda säkerhetsfunktionerna: kommandot auth, som kräver att klienter autentiserar för att få åtkomst till databasen. Lösenordet konfigureras direkt i Redis konfigurationsfil: /etc/redis/redis.conf
cache-backend-redis-use-lua
use_lua
Aktivera eller inaktivera Lua.

Lua: Med Lua kan en del av programlogiken köras i Redis, vilket förbättrar prestanda och säkerställer datakonsekvens genom atomisk exekvering.
0
cache-backend-redis-use-lua-on-gc
use_lua_on_gc
Aktivera eller inaktivera Lua för skräpinsamling.

Lua: Med Lua kan en del av programlogiken köras i Redis, vilket förbättrar prestanda och säkerställer datakonsekvens genom atomisk exekvering.
1

Exempelkommando (standardcache)

I följande exempel aktiveras Redis standardcachelagring, värden ställs in på 127.0.0.1 och databasnumret tilldelas till 0. Redis använder standardvärden för alla andra parametrar.

bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-server=127.0.0.1 --cache-backend-redis-db=0

Konfigurera Redis-sidcache

Om du vill konfigurera Redis-sidcache på Commerce kör du kommandot setup:config:set med ytterligare parametrar.

bin/magento setup:config:set --page-cache=redis --page-cache-redis-<parameter>=<value>...

Med följande parametrar:

  • --page-cache=redis aktiverar Redis-sidcache. Om den här funktionen redan har aktiverats utelämnar du den här parametern.

  • --page-cache-redis-<parameter>=<value> är en lista med nyckel-och-värde-par som konfigurerar sidcache:

Kommandoradsparameter
Värde
Betydelse
Standardvärde
page-cache-redis-server
server
Fullständigt kvalificerat värdnamn, IP-adress eller absolut sökväg till en UNIX-socket. Standardvärdet 127.0.0.1 anger att Redis är installerat på Commerce-servern.
127.0.0.1
page-cache-redis-port
port
Redis-serverlyssningsport
6379
page-cache-redis-db
databas
Krävs om du använder Redis för både standardcache och helsidescache. Ange databasnumret för en av cacherna. det andra cacheminnet använder 0 som standard.
Viktigt: Om du använder Redis för mer än en typ av cachning måste databasnumren vara olika. Vi rekommenderar att du tilldelar standardvärdet för cachningsdatabasen till 0, sidcachningsdatabasnumret till 1 och sessionslagringsdatabasnumret till 2.
0
page-cache-redis-password
lösenord
När du konfigurerar ett Redis-lösenord aktiveras en av de inbyggda säkerhetsfunktionerna: kommandot auth, som kräver att klienter autentiserar för att få åtkomst till databasen. Konfigurera lösenordet i Redis-konfigurationsfilen: /etc/redis/redis.conf

I följande exempel aktiveras Redis sidcache-lagring, värden anges till 127.0.0.1 och databasnumret tilldelas till 1. Alla andra parametrar ställs in på standardvärdet.

bin/magento setup:config:set --page-cache=redis --page-cache-redis-server=127.0.0.1 --page-cache-redis-db=1
NOTE
Från och med Adobe Commerce 2.4.9 har Valkey officiellt ersatt Redis i CLI-verktygen. Använd motsvarande Redis CLI-kommandon för version 2.4.8 och tidigare.

Granska konfigurationen av Commerce-miljön

Om du kör kommandona för att konfigurera Redis-cachelagring uppdateras Commerce-miljökonfigurationen (<Commerce-install-dir>app/etc/env.php):

Zend Cache (2.4.8 och tidigare)
code language-php
'cache' => [
    'frontend' => [
        'default' => [
            'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
            'backend_options' => [
                'server' => '127.0.0.1',
                'database' => '0',
                'port' => '6379'
            ],
        ],
        'page_cache' => [
            'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
            'backend_options' => [
                'server' => '127.0.0.1',
                'port' => '6379',
                'database' => '1',
                'compress_data' => '0'
            ]
        ]
    ]
],
Symfony Cache (2.4.9+)
code language-php
'cache' => [
    'frontend' => [
        'default' => [
            'backend' => 'redis',
            'backend_options' => [
                'server' => '127.0.0.1',
                'database' => '0',
                'port' => '6379'
            ],
        ],
        'page_cache' => [
            'backend' => 'redis',
            'backend_options' => [
                'server' => '127.0.0.1',
                'port' => '6379',
                'database' => '1',
                'compress_data' => '0'
            ]
        ]
    ]
],
note
NOTE
Använd den förenklade backend-typen 'backend' => 'redis' från och med Commerce 2.4.9 i stället för den fullständiga klassökvägen. Symfony Cache används automatiskt när det förenklade namnet anges.

Konfigurera ytterligare cachealternativ

Förinläsningsfunktion för Redis

Eftersom Commerce lagrar konfigurationsdata i Redis-cachen kan du förhandsladda data som återanvänds mellan sidorna. Analysera data som överförs från Redis till Commerce för att hitta nycklar som måste läsas in i förväg. Adobe föreslår att data läses in i förväg på alla sidor, till exempel SYSTEM_DEFAULT, EAV_ENTITY_TYPES och DB_IS_UP_TO_DATE.

Redis använder pipeline för sammansatta inläsningsbegäranden. Nycklarna ska innehålla databasprefixet. Om till exempel databasprefixet är 061_ ser förinläsningsnyckeln ut så här: 061_SYSTEM_DEFAULT

Zend Cache
code language-php
'cache' => [
    'frontend' => [
        'default' => [
            'id_prefix' => '061_',
            'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
            'backend_options' => [
                'server' => 'redis',
                'database' => '0',
                'port' => '6379',
                'password' => '',
                'compress_data' => '1',
                'compression_lib' => '',
                'preload_keys' => [
                    '061_EAV_ENTITY_TYPES',
                    '061_GLOBAL_PLUGIN_LIST',
                    '061_DB_IS_UP_TO_DATE',
                    '061_SYSTEM_DEFAULT',
                ],
            ]
        ],
        'page_cache' => [
            'id_prefix' => '061_'
        ]
    ]
]
Symfony-cache
code language-php
'cache' => [
    'frontend' => [
        'default' => [
            'id_prefix' => '061_',
            'backend' => 'redis',
            'backend_options' => [
                'server' => 'redis',
                'database' => '0',
                'port' => '6379',
                'password' => '',
                'compress_data' => '1',
                'compression_lib' => '',
                'preload_keys' => [
                    '061_EAV_ENTITY_TYPES',
                    '061_GLOBAL_PLUGIN_LIST',
                    '061_DB_IS_UP_TO_DATE',
                    '061_SYSTEM_DEFAULT',
                ],
            ]
        ],
        'page_cache' => [
            'id_prefix' => '061_'
        ]
    ]
]

När du använder förinläsningsfunktionen med en L2-cache måste du lägga till suffixet :hash till dina nycklar. L2-cachen överför bara hash-värdet av data, inte själva data.

'preload_keys' => [
    '061_EAV_ENTITY_TYPES:hash',
    '061_GLOBAL_PLUGIN_LIST:hash',
    '061_DB_IS_UP_TO_DATE:hash',
    '061_SYSTEM_DEFAULT:hash',
],

Parallell generering

Från och med Commerce 2.4.0 introducerade Adobe alternativet allow_parallel_generation för användare som inte vill vänta på lås. Det är inaktiverat som standard och Adobe rekommenderar att du inaktiverar det tills du har för många konfigurationer och/eller block.

Så här aktiverar du parallell generering:

bin/magento setup:config:set --allow-parallel-generation

Eftersom det är en flagga kan du inte inaktivera den med ett kommando. Ange konfigurationsvärdet manuellt till false:

Zend Cache
code language-php
    'cache' => [
        'frontend' => [
            'default' => [
                'id_prefix' => 'b0b_',
                'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
                'backend_options' => [
                    'server' => 'redis',
                    'database' => '0',
                    'port' => '6379',
                    'password' => '',
                    'compress_data' => '1',
                    'compression_lib' => ''
                ]
            ],
            'page_cache' => [
                'id_prefix' => 'b0b_'
            ]
        ],
        'allow_parallel_generation' => false
    ],
Symfony-cache
code language-php
    'cache' => [
        'frontend' => [
            'default' => [
                'id_prefix' => 'b0b_',
                'backend' => 'redis',
                'backend_options' => [
                    'server' => 'redis',
                    'database' => '0',
                    'port' => '6379',
                    'serializer' => 'igbinary',
                    'compress_data' => '1',
                    'compression_lib' => 'gzip'
                ]
            ],
            'page_cache' => [
                'id_prefix' => 'b0b_'
            ]
        ],
        'allow_parallel_generation' => false
    ],

Prestandaoptimering för Symfony Cache

Om du använder Symfony Cache kan du ytterligare optimera prestanda genom att konfigurera Igbinary-serialiseraren, installera det binära PHP-tillägget och phpredis-tillägget samt aktivera beständiga anslutningar.

Igbinär serialisering

Igbinär serialisering ger betydande prestandaförbättringar jämfört med PHP:s standardserialisering. Den måste konfigureras manuellt i app/etc/env.php:

'cache' => [
    'frontend' => [
        'default' => [
            'backend_options' => [
                'server' => 'redis',
                'database' => '0',
                'port' => '6379',
                'serializer' => 'igbinary',  // Enable Igbinary serialization
            ]
        ],
        'page_cache' => [
            'backend_options' => [
                'server' => 'redis',
                'database' => '1',
                'port' => '6379',
                'serializer' => 'igbinary',  // Enable Igbinary for page cache too
            ]
        ]
    ]
]

Installera tillägget PHP Igbinary

Om du vill använda binär serialisering måste du installera tillägget Igbinary i PHP.

Använder apt (rekommenderas för Debian/Ubuntu):

sudo apt-get install php-igbinary
sudo systemctl restart php-fpm
php -m | grep igbinary

Använder pec (alternativ metod):

sudo pecl install igbinary
echo "extension=igbinary.so" | sudo tee /etc/php/8.3/mods-available/igbinary.ini
sudo phpenmod igbinary
sudo systemctl restart php-fpm
php -m | grep igbinary

PHP Redis-tillägg: phpredis vs. Predis

Commerce 2.4.9+ innehåller automatisk återgång mellan phpredis (ursprungligt C-tillägg) och Predis (rent PHP-bibliotek). Installera phpredis för optimala prestanda:

Använder apt (rekommenderas för Debian/Ubuntu):

sudo apt-get install php-redis
sudo systemctl restart php-fpm
php -m | grep redis

Använder pec (alternativ metod):

sudo pecl install redis
echo "extension=redis.so" | sudo tee /etc/php/8.3/mods-available/redis.ini
sudo phpenmod redis
sudo systemctl restart php-fpm
php -m | grep redis

Prestandajämförelse:

Åtgärd
Predis
phpredis
Förbättring
Cache GET
1-5 ms
0,5-2 ms
2-3 gånger snabbare
Cacheuppsättning
2-6 ms
0,8-2,5 ms
2-3 gånger snabbare
Taggåtgärder
10-30 ms
3-10 ms
3-4 gånger snabbare

Beständiga anslutningar

Beständiga anslutningar återanvänder befintliga Redis-anslutningar över flera begäranden, vilket ger 5-15 % snabbare cacheåtgärder. Konfigurera i app/etc/env.php:

'cache' => [
    'frontend' => [
        'default' => [
            'backend_options' => [
                'server' => 'redis',
                'database' => '0',
                'port' => '6379',
                'persistent' => '1',
                'persistent_id' => 'cache_default',
                'timeout' => '2.5',
                'read_timeout' => '2.0',
            ]
        ],
        'page_cache' => [
            'backend_options' => [
                'server' => 'redis',
                'database' => '1',
                'port' => '6379',
                'persistent' => '1',
                'persistent_id' => 'cache_fpc',
            ]
        ]
    ]
]
IMPORTANT
Använd en unik persistent_id för varje cachetyp för att förhindra anslutningskonflikter.

Fullständig optimerad konfiguration

Här är en produktionsklar Symfonisk konfiguration som kombinerar alla prestandaoptimeringar:

'cache' => [
    'frontend' => [
        'default' => [
            'id_prefix' => 'b0b_',
            'backend' => 'redis',
            'backend_options' => [
                'server' => 'redis',
                'database' => '0',
                'port' => '6379',
                'serializer' => 'igbinary',
                'compress_data' => '1',
                'compression_lib' => 'gzip',
                'persistent' => '1',
                'persistent_id' => 'cache_default',
                'timeout' => '2.5',
                'read_timeout' => '2.0',
                'use_lua' => '1',
                'use_lua_on_gc' => '1',
                'preload_keys' => [
                    'b0b_EAV_ENTITY_TYPES',
                    'b0b_GLOBAL_PLUGIN_LIST',
                    'b0b_DB_IS_UP_TO_DATE',
                    'b0b_SYSTEM_DEFAULT',
                ],
            ]
        ],
        'page_cache' => [
            'id_prefix' => 'b0b_',
            'backend' => 'redis',
            'backend_options' => [
                'server' => 'redis',
                'database' => '1',
                'port' => '6379',
                'serializer' => 'igbinary',
                'compress_data' => '0',
                'persistent' => '1',
                'persistent_id' => 'cache_fpc',
            ]
        ]
    ],
    'allow_parallel_generation' => false
]

Kontrollera Redis-anslutningen

Så här kontrollerar du att Redis och Commerce fungerar ihop:

  1. Logga in på Redis- och Commerce-servern.
  2. Öppna en terminal.
  3. Kontrollera anslutningen genom att använda kommandot redis-cli monitor eller kommandot redis-cli ping.

Om kommandona lyckas körs Redis och kan kommunicera med Commerce-programmet. Om de misslyckas finns det ett anslutningsproblem mellan Redis och Commerce som du måste lösa.

Redis-bildskärm, kommando

redis-cli monitor

Exempel på sidcachning:

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"
...

Om båda kommandona lyckas är Redis korrekt konfigurerat.

Inspektera komprimerade data

Använd verktyget RESP.app om du vill inspektera komprimerade sessionsdata och sidcache. Den stöder automatisk dekomprimering av data för session- och sidcache i Commerce 2 och visar PHP-sessionsdata i en läsbar form.

recommendation-more-help
commerce-operations-help-configuration