2013-01-18 3 views
13

나는 인터넷 검색을 수행했으며이 질문에 대한 답을 찾을 수 없습니다. 레일 그런 캐시에 대한 만료 시간을 지정할 수 있습니다 :Rails 캐시의 기본 만료 시간은 얼마나됩니까?

Rails.cache.fetch("my_var", :expires_in => 10.seconds) 

하지만 아무것도 지정하지 않으면 어떻게됩니까 : 그것은 만료되지 않습니다

Rails.cache.fetch("my_var") 

를? 기본값이 있습니까? 절대 만료되지 않는 것을 명시 적으로 정의하려면 어떻게해야합니까?

+0

fetch'하지 않는'에 만료 설정 블록이 주어지지 않으면 어떤 효과가 있습니다 –

답변

11

정말 사용중인 캐시 저장소에 따라 다릅니다. 레일스는 몇 가지를 제공합니다. 가장 인기있는 것은 Memcached입니다. Memcached의 핵심 기능 중 하나는 automatically expires old unused records이므로 잊어 버릴 수 있습니다 : 만료 옵션.

메모리 저장 공간이나 재실행 저장소와 같은 다른 레일스 캐시 저장소는 명시 적으로 지정하지 않으면 날짜를 만료하지 않습니다. @Rahul 말한대로 (하지 않습니다), 기본 만료 시간은 결코 memcached를위한 크루즈를 사용

More about how cache key expiration works in Rails.

+1

나는 데이터가 필요하다고 생각하는 새로운 것을 정의하기 위해 평균으로 expires_in을 사용합니다. 5 분 동안의 데이터가 있으면 문제가 없다고 생각하면 expires_in : 5 분을 사용합니다. 캐싱의 주된 이유는 동시성과 망치질을 빠르게하는 것입니다. –

+0

@OskarHolmkratz 유용한 대안은 버전을 반영하는 캐시 키를 사용하는 것입니다 (ActiveRecord가 updated_at 타임 스탬프에 기반한 .cache_key 특성을 갖는 이유입니다). 그러면 만료에 대해 걱정할 필요가 없습니다. 최신 결과를 표시하고 오래된 데이터가 자동으로 제거됩니다. – mahemoff

5

그들은 만료되지 않습니다. (레일스에 기본 설정된 FileStore 기반 캐시의 경우)

키가 캐시 저장소에서 발견되면 값이 사용됩니다. 따라서 적어도 항상 만료 시간을 추가하는 것이 좋습니다.

+6

그건 논리처럼 보이지만 그것에 대한 참고 자료가 있습니까? 나는 많은 것을 수색 해왔고 아무데도 찾을 수 없다. 게다가, 내 시스템은 기본 만기 시간이있는 것처럼 작동하고 일부 캐시 숨겨진 기본값으로 인한 가능성을 배제하고 싶습니다. 또한 기본 캐시 저장소에 종속되지 않습니까? – joscas

8

. @cemem에 의하면, memcached는 사용되지 않는 오래된 레코드를 버리기 때문에 쓰레기 수거에 대해 걱정할 필요가 없다.

Expires_in default is 0, which means never 

https://github.com/mperham/dalli#configuration

당신이 크루즈

config.cache_store = :dalli_store, { expires_in: 1.day} 

과 더 나은 개별 제어를위한 글로벌 만료 시간을 설정할 수 있습니다 :

Rails.cache.write "some_cache_key", some_cachable_string, expires_in: 3.hours 
,536을

공식 크루즈 설명서를 참조하십시오

새로운 문서 http://apidock.com/rails/ActiveSupport/Cache/Store/write 많은 말을하지 않지만, 이전을 수행합니다 (일부 이벤트가 발생한 경우) http://apidock.com/rails/ActiveSupport/Cache/MemCacheStore/write

수동으로 캐시를 만료 :

Rails.cache.delete "some_cache_key" 
관련 문제