2011-12-23 2 views
2

결과가 자주 변경되지 않는 비싼 db 쿼리가 있습니다.RoR에서 값 비싼 쿼리 결과 캐쉬

이 쿼리를 사용하여 실제로 95 %의 시간 동안 신경 쓰이는 유일한 것은 50KB의 원시 데이터 문자열입니다.

비싼 자주 사용 된 쿼리의 결과를 캐싱하기 위해 페이지 캐싱을 사용하는 것이 "RoR 방식"TM과 완전히 반대가 있습니까?

db 서버 자체에서 결과 집합을 캐싱하는 것은 약간 과잉입니다. 실제로 쿼리 결과에서 .collect {}를 (를) 가져온 데이터를 약간만 신경 쓰고 있기 때문입니다. 그리고 페이지 캐싱은 여러 페이지가이 데이터를 사용하고 모두 주변의보기 만 변경하여 동일한 캐싱을하기 때문에 낭비입니다. 당신이 원하는 것처럼

+0

"RoR 방식"에 대해 너무 걱정하지 않을 것입니다. 당신이 문제에 대한 해결책을 가지고 있다면, 그것에 만족하십시오. DHH는 당신 집에 오지 않고 당신의 키보드를 훔칠 것입니다;) 그런데, 프레드릭의 대답은 아마도 당신이 찾고있는 것일 겁니다. – cvshepherd

+0

확인. 캐시를 사용하는 방법을 알고 있지만 (필자는 memcache를 사용하고 있습니다) 적절한시기와 적절하지 않은지는 확실하지 않았습니다. 나는 보통 HTML/자바 스크립트가 완전히 렌더링 된 것을 보았으므로 원시 데이터를 캐시하는 것이 "나쁜 것"인지 확실하지 않았습니다. 나는 그것에 대해 어떤 교리도 없다고 생각할 것입니다. 고마워 여러분 : – Luke

답변

4

은 레일

Rails.cache.fetch('cache_key') do 
    # calculations here 
end 

이 하나가 계산을 수행하고 캐시에있는 블록의 반환 값을 거즈 나 캐시에서 값을 읽어 캐시 소리.

명시 적으로 만료 (Rails.cache.delete)하거나 만료 시간을 설정하거나 세대 별 캐시 키를 사용할 수 있습니다.

사용할 수있는 다양한 캐시 저장소가 있지만 일반적인 캐시 저장소 중 하나는 memcsched입니다. 캐시 저장소를 구성하는 방법에 대한 자세한 내용은 here

+0

완벽. 대시 보드 앱에서 비싼 쿼리를 캐시 했으므로 이제는 빠르고 멋졌습니다. –

관련 문제