Ubuntu 14.04에서 WordPress 속도를 높이기 위해 Redis 캐싱을 구성하는 방법
소개
Redis는 메모리 내 저장소와 캐시로 모두 작동할 수 있는 오픈 소스 키 값 저장소입니다. Redis는 자체적으로 데이터베이스 서버로 사용하거나 이 튜토리얼에서 수행하는 작업 속도를 높이기 위해 MySQL과 같은 관계형 데이터베이스와 함께 사용할 수 있는 데이터 구조 서버입니다.
이 자습서에서는 Redis를 WordPress용 캐시로 구성하여 WordPress 페이지를 렌더링하는 데 사용되는 중복되고 시간 소모적인 데이터베이스 쿼리를 완화합니다. 그 결과 훨씬 더 빠르고 더 적은 데이터베이스 리소스를 사용하며 조정 가능한 영구 캐시를 제공하는 WordPress 사이트가 탄생했습니다. 이 가이드는 Ubuntu 14.04에 적용됩니다.
모든 사이트는 다르지만 아래는 이 가이드에서 구성한 대로 Redis가 있거나 없는 기본 Wordpress 설치 홈 페이지의 예제 벤치마크입니다. Chrome 개발자 도구는 브라우저 캐싱을 비활성화한 상태에서 테스트하는 데 사용되었습니다.
Redis가 없는 기본 WordPress 홈페이지:
804ms 페이지 로드 시간
Redis가 있는 기본 WordPress 홈페이지:
449ms 페이지 로드 시간
참고: 이 WordPress용 Redis 캐싱 구현은 주석이 잘 달린 타사 스크립트에 의존합니다. 스크립트는 DigitalOcean의 자산 서버에서 호스팅되지만 외부에서 개발되었습니다. WordPress용 Redis 캐싱을 직접 구현하려면 여기에 제시된 개념을 기반으로 몇 가지 추가 작업을 수행해야 합니다.
Redis 대 Memcached
Memcached는 인기 있는 캐시 선택이기도 합니다. 그러나 이 시점에서 Redis는 훨씬 더 큰 기능 세트를 사용하여 Memcached가 할 수 있는 모든 작업을 수행합니다. 이 스택 오버플로 페이지에는 Redis를 처음 사용하는 사람을 위한 개요 또는 소개와 같은 일반적인 정보가 있습니다.
캐싱은 어떻게 작동합니까?
WordPress 페이지가 처음 로드되면 서버에서 데이터베이스 쿼리가 수행됩니다. Redis는 이 쿼리를 기억하거나 캐시합니다. 따라서 다른 사용자가 Wordpress 페이지를 로드하면 데이터베이스를 쿼리할 필요 없이 Redis와 메모리에서 결과가 제공됩니다.
이 가이드에 사용된 Redis 구현은 WordPress(만료 없음)의 영구 개체 캐시로 작동합니다. 개체 캐시는 WordPress 페이지를 로드하는 데 필요한 SQL 쿼리를 메모리에 캐싱하여 작동합니다.
페이지가 로드되면 결과 SQL 쿼리 결과가 Redis에 의해 메모리에서 제공되므로 쿼리가 데이터베이스에 도달할 필요가 없습니다. 그 결과 페이지 로드 시간이 훨씬 빨라지고 데이터베이스 리소스에 대한 서버 영향이 줄어듭니다. Redis에서 쿼리를 사용할 수 없는 경우 데이터베이스는 결과를 제공하고 Redis는 결과를 캐시에 추가합니다.
데이터베이스에서 값이 업데이트되면(예: WordPress에서 새 게시물 또는 페이지가 생성됨) 해당 쿼리에 대한 Redis 값이 무효화되어 잘못된 캐시 데이터가 표시되지 않도록 합니다.
캐싱에 문제가 있는 경우 Redis 명령줄에서 flushall
명령을 사용하여 Redis 캐시를 제거할 수 있습니다.
redis-cli
프롬프트가 표시되면 다음을 입력합니다.
flushall
추가 참조: WordPress 객체 캐시 문서
전제 조건
이 가이드를 시작하기 전에 sudo 사용자를 설정하고 WordPress를 설치해야 합니다.
- Ubuntu 14.04 Droplet(1GB 이상 권장)
- sudo 사용자 추가
- 워드프레스를 설치합니다. WordPress를 설치하는 방법은 여러 가지가 있지만 이 가이드는 이러한 지침에 따라 테스트되었습니다.
1단계 - Redis 설치
WordPress에서 Redis를 사용하려면 redis-server
및 php5-redis
의 두 가지 패키지를 설치해야 합니다. redis-server
패키지는 Redis 자체를 제공하는 반면, php5-redis
패키지는 WordPress와 같은 PHP 애플리케이션이 Redis와 통신할 수 있도록 PHP 확장을 제공합니다.
소프트웨어 설치:
sudo apt-get install redis-server php5-redis
2단계 - Redis를 캐시로 구성
Redis는 NoSQL 데이터베이스 저장소와 캐시로 모두 작동할 수 있습니다. 이 가이드 및 사용 사례에서 Redis는 캐시로 구성됩니다. 이를 위해서는 다음과 같은 설정이 필요합니다.
/etc/redis/redis.conf
파일을 편집하고 맨 아래에 다음 행을 추가하십시오.
sudo nano /etc/redis/redis.conf
파일 끝에 다음 줄을 추가합니다.
maxmemory 256mb
maxmemory-policy allkeys-lru
변경이 완료되면 파일을 저장하고 닫습니다.
3단계 - Redis Cache 백엔드 스크립트 얻기
이 WordPress용 PHP 스크립트는 원래 Eric Mann이 개발했습니다. WordPress용 Redis 개체 캐시 백엔드입니다.
object-cache.php
스크립트를 다운로드합니다. 이 다운로드는 DigitalOcean의 자산 서버에서 가져온 것이지만 타사 스크립트입니다. 작동 방식을 보려면 스크립트의 주석을 읽어야 합니다.
PHP 스크립트를 다운로드합니다.
wget https://assets.digitalocean.com/articles/wordpress_redis/object-cache.php
WordPress 설치의 /wp-content
디렉토리로 파일을 이동합니다.
sudo mv object-cache.php /var/www/html/wp-content/
WordPress 설치에 따라 위치가 다를 수 있습니다.
4단계 - wp-config.php에서 캐시 설정 활성화
다음으로 wp-config.php
파일을 편집하여 사이트 이름(또는 원하는 문자열)과 함께 캐시 키 솔트를 추가합니다.
nano /var/www/html/wp-config.php
* Authentication Unique Keys and Salts.
섹션 끝에 다음 줄을 추가합니다.
define('WP_CACHE_KEY_SALT', 'example.com');
도메인 이름이나 다른 문자열을 소금으로 사용할 수 있습니다.
참고: 둘 이상의 WordPress 사이트를 호스팅하는 사용자의 경우 각 사이트는 고유한 캐시 키 솔트가 있는 한 동일한 Redis 설치를 공유할 수 있습니다.
또한 WP_CACHE_KEY_SALT
줄 뒤에 다음 줄을 추가하여 Redis 개체 캐시 플러그인으로 영구 캐시를 만듭니다.
define('WP_CACHE', true);
모두 합쳐서 파일은 다음과 같아야 합니다.
* Authentication Unique Keys and Salts.
. . .
define('NONCE_SALT', 'put your unique phrase here');
define('WP_CACHE_KEY_SALT', 'example.com');
define('WP_CACHE', true);
파일을 저장하고 닫습니다.
5단계 - Redis 및 Apache 다시 시작
마지막으로 redis-service
및 apache2
를 다시 시작합니다.
Redis를 다시 시작합니다.
sudo service redis-server restart
아파치를 다시 시작합니다.
sudo service apache2 restart
사용 중인 경우 php5-fpm
을 다시 시작하십시오. 이것은 DigitalOcean에 대한 기본 설치의 일부가 아닙니다.
sudo service php5-fpm restart
그게 다야! 귀하의 WordPress 사이트는 이제 Redis 캐싱을 사용하고 있습니다. 페이지 로드 속도와 리소스 사용을 확인하면 개선 사항을 알 수 있습니다.
redis-cli로 Redis 모니터링
Redis를 모니터링하려면 다음과 같이 redis-cli
명령을 사용합니다.
redis-cli monitor
이 명령을 실행하면 캐시된 쿼리를 제공하는 Redis의 실시간 출력이 표시됩니다. 아무 것도 표시되지 않으면 웹사이트를 방문하여 페이지를 새로고침하세요.
다음은 Redis를 사용하여 이 가이드에 따라 구성된 WordPress 사이트의 출력 예입니다.
OK
1412273195.815838 "monitor"
1412273198.428472 "EXISTS" "example.comwp_:default:is_blog_installed"
1412273198.428650 "GET" "example.comwp_:default:is_blog_installed"
1412273198.432252 "EXISTS" "example.comwp_:options:notoptions"
1412273198.432443 "GET" "example.comwp_:options:notoptions"
1412273198.432626 "EXISTS" "example.comwp_:options:alloptions"
1412273198.432799 "GET" "example.comwp_:options:alloptions"
1412273198.433572 "EXISTS" "example.comwp_site-options:0:notoptions"
1412273198.433729 "EXISTS" "example.comwp_:options:notoptions"
1412273198.433876 "GET" "example.comwp_:options:notoptions"
1412273198.434018 "EXISTS" "example.comwp_:options:alloptions"
1412273198.434161 "GET" "example.comwp_:options:alloptions"
1412273198.434745 "EXISTS" "example.comwp_:options:notoptions"
1412273198.434921 "GET" "example.comwp_:options:notoptions"
1412273198.435058 "EXISTS" "example.comwp_:options:alloptions"
1412273198.435193 "GET" "example.comwp_:options:alloptions"
1412273198.435737 "EXISTS" "example.comwp_:options:notoptions"
1412273198.435885 "GET" "example.comwp_:options:notoptions"
1412273198.436022 "EXISTS" "example.comwp_:options:alloptions"
1412273198.436157 "GET" "example.comwp_:options:alloptions"
1412273198.438298 "EXISTS" "example.comwp_:options:notoptions"
1412273198.438418 "GET" "example.comwp_:options:notoptions"
1412273198.438598 "EXISTS" "example.comwp_:options:alloptions"
1412273198.438700 "GET" "example.comwp_:options:alloptions"
1412273198.439449 "EXISTS" "example.comwp_:options:notoptions"
1412273198.439560 "GET" "example.comwp_:options:notoptions"
1412273198.439746 "EXISTS" "example.comwp_:options:alloptions"
1412273198.439844 "GET" "example.comwp_:options:alloptions"
1412273198.440764 "EXISTS" "example.comwp_:options:notoptions"
1412273198.440868 "GET" "example.comwp_:options:notoptions"
1412273198.441035 "EXISTS" "example.comwp_:options:alloptions"
1412273198.441149 "GET" "example.comwp_:options:alloptions"
1412273198.441813 "EXISTS" "example.comwp_:options:notoptions"
1412273198.441913 "GET" "example.comwp_:options:notoptions"
1412273198.442023 "EXISTS" "example.comwp_:options:alloptions"
1412273198.442121 "GET" "example.comwp_:options:alloptions"
1412273198.442652 "EXISTS" "example.comwp_:options:notoptions"
1412273198.442773 "GET" "example.comwp_:options:notoptions"
1412273198.442874 "EXISTS" "example.comwp_:options:alloptions"
1412273198.442974 "GET" "example.comwp_:options:alloptions"
출력을 중지하려면 CTRL-C
를 누르십시오.
이는 Redis가 처리하는 쿼리를 정확히 확인하는 데 유용합니다.
결론
이 가이드를 따른 후 WordPress는 이제 Ubuntu 14.04에서 Redis를 캐시로 사용하도록 구성됩니다.
다음은 WordPress에 대한 몇 가지 추가 보안 및 관리 가이드입니다.
Ubuntu의 WordPress에서 보안 업데이트 및 설치를 구성하는 방법
WPScan을 사용하여 Wordpress에서 취약한 플러그인 및 테마를 테스트하는 방법
WP-CLI를 사용하여 명령줄에서 WordPress 사이트를 관리하는 방법