[온-프레미스]{class="badge informative" title="Adobe Commerce 온-프레미스 프로젝트에만 적용됩니다."}
기본 및 페이지 캐시에 대한 Redis 구성
Commerce은 Redis 페이지 및 기본 캐싱을 구성하는 명령줄 옵션을 제공합니다. <Commerce-install-dir>app/etc/env.php 파일을 편집하여 캐싱을 구성할 수 있지만 특히 초기 구성의 경우 명령줄을 사용하는 것이 좋습니다. 명령줄에서 유효성 검사를 제공하여 구성이 문법적으로 정확한지 확인합니다.
필수 구성 요소:
계속하기 전에 Redis 설치.
Redis 캐시 구현
Adobe Commerce은 다음과 같은 Redis 캐시 백엔드 구현을 사용했습니다.
- 레거시 Redis 백엔드(
Cm_Cache_Backend_Redis) - 이전 Redis 구성에서 더 이상 사용되지 않는 구현입니다. - Redis backend(
Magento\Framework\Cache\Backend\Redis) - 이 항목의 명령줄 구성에서 기본 및 페이지 캐시에 사용하는 백엔드입니다. - L2 캐시 백엔드 (
Magento\Framework\Cache\Backend\RemoteSynchronizedCache) - Redis를 원격 백엔드 및 로컬 파일 캐시 저장소로 사용하여 노드 간 캐시 데이터를 동기화하는 두 수준 캐시 구현입니다. 두 수준 캐시 구성을 참조하세요.
Redis 기본 캐싱 구성
setup:config:set 명령을 실행하고 Redis 기본 캐싱과 관련된 매개 변수를 지정합니다.
bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-<parameter>=<value>...
일반적인 매개 변수는 다음과 같습니다.
-
--cache-backend=redis은(는) Redis 기본 캐싱을 사용합니다. 이 기능을 이미 활성화한 경우에는 이 매개변수를 생략합니다. -
--cache-backend-redis-<parameter>=<value>은(는) 기본 캐싱을 구성하는 키-값 쌍의 목록입니다.
cache-backend-redis-server127.0.0.1cache-backend-redis-port6379cache-backend-redis-db중요: 둘 이상의 캐싱 유형에 대해 Redis를 사용하는 경우 데이터베이스 번호는 달라야 합니다. 기본 캐싱 데이터베이스 번호는 0으로, 페이지 캐싱 데이터베이스 번호는 1로, 세션 저장소 데이터베이스 번호는 2로 지정하는 것이 좋습니다.
0cache-backend-redis-passwordauth 명령을 사용할 수 있습니다. 이 경우 데이터베이스에 액세스하려면 클라이언트가 인증해야 합니다. Redis의 구성 파일에 암호가 직접 구성되었습니다. /etc/redis/redis.confcache-backend-redis-compress-data0(으)로 설정하십시오.1cache-backend-redis-compression-libsnappy, lzf, l4z, zstd 및 gzip입니다. 자동으로 결정하려면 비워 둡니다.cache-backend-redis-use-lua기본값:
0에서 유지. Lua가 활성화되면 번들 Redis 라이브러리(1.17.x)에서 발생하는 알려진 성능 후퇴와 GraphQL 캐시 누락 문제를 방지하기 위해 Lua 모드가 기본적으로 비활성화됩니다.0cache-backend-redis-use-lua-on-gcbackend_clean_cache cron 작업)에 대한 Lua 스크립트를 활성화하거나 비활성화합니다.기본값:
1에서 유지. GC 중에 원자 태그 세트 정리를 보장하기 위해 의도적으로 활성화되었습니다. 이 조건이 없으면 캐시 저장 작업과 동시에 backend_clean_cache cron이 실행되어 캐시 항목이 캐시 태그 인덱스에 해당 레코드 없이 남아 있을 때 경합 조건이 발생할 수 있습니다. 이로 인해 태그 기반 무효화는 자동으로 실패합니다. 예를 들어 제품 가격을 업데이트하면 제품 캐시가 무효화되지 않고 대신 전체 캐시 플러시가 필요할 수 있습니다.1Lua 모드
Lua 모드가 활성화되면 EVALSHA을(를) 통해 서버측에서 실행되는 단일 원자 스크립트로 여러 Redis 작업(캐시 쓰기, 태그 업데이트, 가비지 수집)을 번들로 묶습니다. 이렇게 하면 동시 요청의 인터리빙이 방지됩니다. 예를 들어 캐시 항목과 해당 태그 멤버십이 함께 기록되도록 할 수 있습니다.
use_lua 및 use_lua_on_gc의 기본값을 변경하지 마십시오.use_lua: Adobe Commerce 2.4.7 또는 2.4.8(라이브러리colinmollenhour/cache-backend-redis1.17.1)에서 이 기능을 사용하면 캐시 손상 및 GraphQL 캐시 누락 문제가 발생할 수 있습니다.use_lua_on_gc: Adobe Commerce 2.4.8에서 이 기능을 사용하지 않도록 설정하면 가비지 수집 중에 원자 보호가 제거되며 태그 기반 캐시 무효화가 자동으로 실패하여 복구할 전체 캐시 플러시가 필요할 수 있습니다.
예제 명령(기본 캐시)
다음 예제에서는 Redis 기본 캐싱을 사용하고 호스트를 127.0.0.1(으)로 설정하고 데이터베이스 번호를 0으로 할당합니다. Redis는 다른 모든 매개 변수에 기본값을 사용합니다.
bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-server=127.0.0.1 --cache-backend-redis-db=0
Redis 페이지 캐싱 구성
Commerce에서 Redis 페이지 캐싱을 구성하려면 추가 매개 변수와 함께 setup:config:set 명령을 실행합니다.
bin/magento setup:config:set --page-cache=redis --page-cache-redis-<parameter>=<value>...
일반적인 매개 변수는 다음과 같습니다.
-
--page-cache=redis에서 Redis 페이지 캐싱을 사용할 수 있습니다. 이 기능을 이미 활성화한 경우에는 이 매개변수를 생략합니다. -
--page-cache-redis-<parameter>=<value>은(는) 페이지 캐싱을 구성하는 키 및 값 쌍의 목록입니다.
page-cache-redis-server127.0.0.1page-cache-redis-port6379page-cache-redis-db중요: 둘 이상의 캐싱 유형에 대해 Redis를 사용하는 경우 데이터베이스 번호는 달라야 합니다. 기본 캐싱 데이터베이스 번호는 0으로, 페이지 캐싱 데이터베이스 번호는 1로, 세션 저장소 데이터베이스 번호는 2로 지정하는 것이 좋습니다.
0page-cache-redis-passwordauth 명령을 사용할 수 있습니다. 이 경우 데이터베이스에 액세스하려면 클라이언트가 인증해야 합니다. Redis 구성 파일 /etc/redis/redis.conf 내에서 암호를 구성하십시오.page-cache-redis-compress-data1(으)로 설정하십시오. 압축을 비활성화하려면 0을(를) 사용하십시오.0page-cache-redis-compression-libsnappy, lzf, l4z, zstd 및 gzip입니다. 자동으로 결정하려면 비워 둡니다.다음 예제에서는 Redis 페이지 캐싱을 활성화하고 호스트를 127.0.0.1(으)로 설정하고 데이터베이스 번호를 1(으)로 할당합니다. 다른 모든 매개변수는 기본값으로 설정됩니다.
bin/magento setup:config:set --page-cache=redis --page-cache-redis-server=127.0.0.1 --page-cache-redis-db=1
Commerce 환경 구성 검토
Redis 캐싱을 구성하는 명령을 실행하면 Commerce 환경 구성(<Commerce-install-dir>app/etc/env.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'
]
]
]
],
추가 캐싱 옵션 구성
Redis 미리 로드 기능
Commerce은 구성 데이터를 Redis 캐시에 저장하기 때문에 페이지 간에 재사용되는 데이터를 미리 로드할 수 있습니다. 미리 로드해야 하는 키를 찾으려면 Redis에서 Commerce으로 전송되는 데이터를 분석하십시오. Adobe에서는 SYSTEM_DEFAULT, EAV_ENTITY_TYPES 및 DB_IS_UP_TO_DATE과(와) 같이 모든 페이지에 로드되는 데이터를 미리 로드할 것을 제안합니다.
Redis는 pipeline을(를) 사용하여 로드 요청을 합성합니다. 키에는 데이터베이스 접두사가 포함되어야 합니다. 예를 들어 데이터베이스 접두사가 061_이면 미리 로드 키는 061_SYSTEM_DEFAULT과(와) 같습니다.
'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_'
]
]
]
L2 캐시에서 미리 로드 기능을 사용하는 경우 키에 :hash 접미사를 추가해야 합니다. L2 캐시는 실제 데이터가 아닌 데이터의 해시만 전송합니다.
'preload_keys' => [
'061_EAV_ENTITY_TYPES:hash',
'061_GLOBAL_PLUGIN_LIST:hash',
'061_DB_IS_UP_TO_DATE:hash',
'061_SYSTEM_DEFAULT:hash',
],
병렬 생성
Commerce 2.4.0 릴리스부터 Adobe에서는 잠금 대기를 없애려는 사용자를 위해 allow_parallel_generation 옵션을 도입했습니다. 이 기능은 기본적으로 비활성화되어 있으며, Adobe에서는 구성 및/또는 블록이 과도하게 설정될 때까지 비활성화하는 것이 좋습니다.
병렬 생성을 사용하려면:
bin/magento setup:config:set --allow-parallel-generation
플래그이므로 명령으로 비활성화할 수 없습니다. 수동으로 구성 값을 false(으)로 설정:
'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
],
PHP Redis 확장
사용자 환경에서 지원하는 경우 기본 PHP Redis 확장(phpredis)을 사용합니다.
apt 사용
Debian 또는 Ubuntu의 경우 apt을(를) 사용합니다.
sudo apt-get install php-redis
sudo systemctl restart php-fpm
php -m | grep redis
pecl 사용
pecl을(를) 사용할 수도 있습니다.
sudo pecl install redis
echo "extension=redis.so" | sudo tee /etc/php/<version>/mods-available/redis.ini
sudo phpenmod redis
sudo systemctl restart php-fpm
php -m | grep redis
Redis 연결 확인
Redis와 Commerce이 제대로 작동하는지 확인하려면 다음을 수행하십시오.
- Redis 및 Commerce을 실행하는 서버에 로그인합니다.
- 터미널을 엽니다.
redis-cli monitor명령 또는redis-cli ping명령을 사용하여 연결을 확인하십시오.
명령이 성공하면 Redis가 실행 중이고 Commerce 애플리케이션과 통신할 수 있습니다. 오류가 발생하면 Redis와 Commerce 간 연결 문제를 해결해야 합니다.
Redis 모니터 명령
redis-cli monitor
샘플 페이지 캐싱 출력:
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"
...
두 명령이 모두 성공하면 Redis가 제대로 설정됩니다.
압축된 데이터 검사
압축된 세션 데이터와 페이지 캐시를 검사하려면 RESP.app 도구를 사용하십시오. Commerce 2 세션 및 페이지 캐시 데이터의 자동 압축 해제를 지원하며 사람이 읽을 수 있는 형식으로 PHP 세션 데이터를 표시합니다.