2012-02-16 2 views
0

나는 캐싱을 구현하는 사이트를 가지고있다.레일 조각 캐싱 전략

가능한 경우, 나는 액션 캐싱을 사용했으며 모델 생성/업데이트시 필요한 작업이 만료되도록 스위퍼를 준비했습니다. 부분에서 내가 좋아하는 뭔가를 가질 수 있도록 caches_action의 대상이되는 뷰 내에서

는 또한 단편은 몇 가지 파셜를 캐시 한 :에서

<% cache('video_content') do %> 
    Some content here 
<% end %> 

을 내 video_sweeper 내가 함께이 조각을 만료하는 것을 시도하고있다 :

expire_fragment('video_content') 

이 조각은 만료되지 않습니다.

나는 이미 caches_action을 사용하고 있기 때문에 어떤 이유로 인해 조각이 무시되고 있습니까? 즉, caches_action 또는 조각 캐싱 중 하나를 선택해야합니까?

이런 경우,이 스위퍼가 작동하는 모든 동작보기가 만료되어야합니다. 즉, 스위퍼가 유지 보수에 어려움을 겪게되어 복잡하게 보일 수 있습니다.

제 질문은 주로 스위퍼에서 호출 할 때 내 조각 캐시가 만료되지 않는 이유이며, 그 이유는 제가 caches_action도 사용하고 있기 때문입니까?

업데이트 : 내 로그를 더 자세히 살펴보면 스위퍼가 내 조각을 만료하고 있음을 실제로 볼 수 있습니다.

Expire fragment views/video_content (0.7ms) 

그러나 만료되기 전에 콘솔에서 놀아 보면 조각이 존재하지 않는 것 같습니다.

ruby-1.9.2-p136 :004 > Rails.cache.exist?('views/video_content') 
=> false 

다시, 이것은 제가이 부분이 거의 작업이 만료 된 경우를 제외하고, 명중되지 않습니다 caches_action을 사용하고 있기 때문에하는 것은 캐시 할 수 있다고 생각합니다.

답변

1

액션 캐싱은 기술적으로 조각을 래핑하는 조각 캐싱 유형입니다. 따라서 조각이 만료 될 수는 있지만 작업 캐시가 만료 될 때까지 표시되지 않습니다.

따라서 조각이 만료되도록하려면 작업도 만료해야합니다. 그러나 단편 캐싱은 목적이 없습니다. 작업이 만료되면 캐시 된 조각이 사용됩니다.

0

액션 캐싱은 완전한 동작을 캐시합니다. 따라서 컨트롤러 동작 (예 : 'show_video')에서 동작 캐시를 사용하고 동일한 뷰인 "show_video"에서 조각 캐싱을 추가하면 효과가별로 없습니다. 현명하게 사용해야합니다.

조각 캐싱이 만료되었다고 말했지만 조치가 호출 될 때 캐시 된 조치가 렌더링됩니다. 그래서 귀하의 경우에는 액션 캐시를 만료해야합니다. 난 당신이 비디오를 통해 갈 제안

그렉 명태하여 답변 check this out

+0

감사를 캐스팅합니다. 그 비디오를 확인해 주셔서 감사합니다. – Pete