2012-02-04 3 views
1

그래서 지금 사용자가 너무 자주 변경하지만 항목의 목록을 가지고 레일, 그래서 나는과 같이 캐시에 보관하기로 결정 : 사용자가 항목이있는 경우이 작동비어있는 캐시를 가져 오거나 만들 때해야 할 일? memcached를, 3

#Fetch the cache 
    def self.fetch_cache(user) 
    Rails.cache.fetch(user.items, :expires_in => 15.minutes) do 
     user.items.order("created_at ASC").all 
    end  
    end 

합니다. 문제는 사용자가 새로운 사용자 또는 다른 항목을 가지고 있기 때문에 항목이 없으면 캐시가 오류를 반환한다는 것입니다.

아무 것도없는 사용자에게이 기능을 사용하려면 어떻게 사용해야합니까?

감사합니다.

답변

3

정말 이상한 캐시 키를 사용하고 있습니다 (첫 번째 인수는 Rails.cache.fetch). 당신은 캐시 엔트리를 식별하는 문자열을 전달해야하지만, 당신은 연결을 전달하고 있습니다.

레일스는 user.items에서 유용하게도을 호출하면 유용한 캐쉬 키가 아닌 문자열로 변환 할 수 있습니다. 캐쉬 키를 계산하기 위해 사용자의 항목을로드해야하므로 유용한 캐쉬 키가 아닙니다. 캐시에서 사용자의 항목!

"user_#{user.id}_items"과 같은 것이 훨씬 더 나은 캐시 키입니다.

관련 문제