wordpress DB 캐시(transient) 사용하기


사실 캐시라고 할수는 없지만 워드프레스의 기본 기능으로 DB 에 만료일을 지정해서 간편하게 값을 넣고 뺄 수 있습니다.

대체로 아래와 같은 경우 사용합니다.

  1. 외부 사이트의 값을 받아서 처리하는 동작을 할때 (RSS, SNS) 매번 그 동작을 실행시키고 싶지 않을경우
  2. 혹은 자주 갱신되지는 않지만 한번 불러올때 시간이 지나치게 소요될 경우, 동작 처리가 늦을 경우

사용법은 아래와 같습니다. 우선 저장하는 방법입니다.

키 : ‘special_query_results’
저장할 값 : $special_query_results
만료시간(초 단위) : 위의 경우 60초 곱하기 60분 곱하기 12이므로 12시간동안 저장해놓겠다는 뜻입니다. 키값은 40자 이하로 해야 합니다.
불러올때는 아래와 같이 불러옵니다.

set_transient 에 사용한 키값으로 불러오면 됩니다.
이렇게 불러올때 만료 기간이 지났는지 알아서 체크해주고, 만약 만료 기간이 지났다면 false를, 지나지 않았다면 저장된 값을 불러옵니다. (따로 만료 기간이 지났는지 체크할 필요가 없습니다.)

API 문서에도 나와있지만 보통 아래처럼 사용합니다.

위의 예제는 외부 사이트의 값을 받아오는 처리를 하고 있는데,
5분 간격으로 저장하고, 만약 만료 기간이 지났다면 다시 가져오는 동작을 수행한 후 다시 저장합니다.

참고로 멀티 사이트의 경우에 모든 사이트에 공통으로 사용할 경우가 있는데, 이때는 펑션의 이름이 조금 틀립니다.

싱글 사이트 : get_transient, 멀티 사이트 : get_site_transient
싱글 사이트 :set_transient, 멀티 사이트 : set_site_transient

 

2015년 1월 20일 추가 (물어보시는 분이 있어서)

참고로 멀티 사이트의 경우 site_meta 테이블에 insert 되며

만료기간 값 : _site_transient_timeout_키값

저장한 값 : _site_transient_키값

이 두개가 쌍으로 들어갑니다.

싱글 사이트의 경우 해당 사이트의 option 테이블에 저장되며 마찬가지로

만료기간 값 : _transient_timeout_키값

저장한 값 : _transient_키값

이 두개가 한쌍으로 들어갑니다.

 

그런데 멀티 사이트라고 해서 반드시 site_transient 를 사용할 필요는 없습니다.

캐시한 값 및 만료 기간을 각 사이트 개별로 저장하고 사용할것인가, 공통으로 하나만 설정해서 사용할것인가의 차이만 있을뿐 get_transient 만 사용해도 무방합니다.wordpress transients API 문서에도 이런 말이 쓰여있는데, DB 에 간단하게 값을 넣고 뺄 수 있지만
실제 저장되는 값들은 DB 에 들어있지 않다고 생각하는게 좋습니다.
만료 기간이 있기때문에 계속 DB 에 저장한 값이 존재한다고 보장할 수 없기 때문입니다.

유용한 펑션이고 저는 페이징 처리가 없는 게시판이나 블로그 등을 제외하고는 꽤 사용하는 편입니다.



댓글 남기기

2 댓글 / "wordpress DB 캐시(transient) 사용하기"

  댓글 이메일 구독  
구독 설정 :

유용한 팁 공유해주셔서 감사합니다. 본문글을 읽다보니 2가지 궁금한 점이 있어 질문을 드리고 싶은데요.

1) 소개해주신 get_transient() 관련 함수는 워드프레스에서 사용하지 않는…. 즉, 사용자가 별도로 생성한 DB 테이블에서의 값을 읽어오는 데도 사용할 수가 있나요?

2) 예제 소스에서… [ $expire = 60 * 5; // 5분 간격으로 캐싱 ], 이 코드가 필요한 이유는 뭔가요? 수명(만료시간)을 설정했음에도 불구하고 별도로 캐시를 해야 하는 이유가 있는지 이해를 못했습니다. 다시 말해 수명 주기가 끝났으면 DB에서 값을 읽어와 리턴하면 되는데… 5분 간격으로 계속 캐시를 해야 하는 이유가 있나요?