2011-02-25 10 views
8

GAE에서 memcache를 사용할 때 나는이 이상한 행동을 거의 감지하지 못합니다. memcache에 값을 설정하고 동일한 값을 검색하려고하면 원래 값 대신 None이 반환됩니다. Memcache 값은 짧은 시간 내에 만료 될 수 없습니다. memcache에 값을 설정할 때 True가 반환되는지 확인합니다. memcache 값이 누락 될 수있는 원인은 무엇입니까? 일반적인 시스템 동작입니까?Google App Engine Memcache

코드 샘플 :

memcache.get(matrix_name+'-'+str(m)+","+str(n),namespace=uuid) 
+1

설정하고 값을 검색하는 코드를 게시 하시겠습니까? –

답변

13

에서 Memcache를 검색 값

cache_set = memcache.set(matrix_name+'-'+str(m)+","+str(n),data[n],namespace=uuid) 
while cache_set == False : 
    sleep(0.1) 
    logging.error(" Cache Set failed. Retrying for %s %s",matrix_name,str[m,n]) 
    cache_set = memcache.set(matrix_name+'-'+str(m)+","+str(n),data[n],namespace=uuid) 

의 설정 방법은 신뢰할 수없는 본질적입니다. 데이터를 보관할 기간 또는 데이터를 보관할 시간을 보장하지 않습니다. 최소한의 기간 내에 저장된 데이터를 항상 반환 할 것이라는 기대와 함께 사용하면 안됩니다.

+0

요즘은 전용 (그러나 유료) 캐시가 있으며, 시간당 $ 0.06입니다. 그러나 그것을 테스트하지 않았습니다. – Jonny

1

당신이해야 할 일은 Memcache가 캐시에 원하는 값을 가지고 있는지 확인하는 것입니다 (그렇지 않은 경우). 그렇지 않으면 데이터 저장소에서 검색하거나 다시 계산해야합니다. 그것은 모든 캐시의 정상적인 동작입니다.

일반적으로 캐시의 저장 속도는 느리지 만 용량이 큰 저레벨 저장 장치에 비해 빠르지 만 작습니다.

디스크 캐시를 상상해보십시오. 실제 디스크보다 작습니다. 디스크 데이터의 작은 부분 만 캐시로 가져올 수 있습니다. 히트/미스 비율의 문제는 캐시의 유효성을 관리하는 것입니다.

GAE에서 memcache는 동적으로 구성되며 사용자는이를 제어 할 수 없으며 대부분 다른 응용 프로그램과 공유됩니다. 따라서 놓은 물건은 항상 캐시에 남아 있지 않을 수도 있습니다. 히트/미스 게임입니다.