웹사이트 검색

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-serverphp5-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.linux-console.net/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-serviceapache2를 다시 시작합니다.

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 사이트를 관리하는 방법