django 프로젝트에서 서버 제한으로 인해 memcached가 아닌 캐시 테이블을 사용하여 몇 가지 쿼리 만 캐시하면됩니다. 그 쿼리의Django에서 캐싱 쿼리
하나는 다음과 같습니다
이의 내가Child
객체를 많이 가지고
Parent
객체를 가지고 있다고 가정 해 봅시다. 간단한 쿼리
parent.childs.all()
의 결과를 저장해야합니다.
나는 그와 아무 문제가없고, 모든 것이 cache.get(key)
이 None
을 반환 계속 cache.set
를 실행 한 후,
key = "%s_children" %(parent.name)
value = cache.get(key)
if value is None:
cache.set(key, parent.children.all(), CACHE_TIMEOUT)
value = cache.get(key)
하지만 가끔은, 단지 때로는 cache.set
이 아무것도하지 않는 것처럼 일부 코드 예상대로 작동합니다.
일부 테스트를 마친 후 parent.children.all().count()
값이 더 높을 때 cache.set
이 작동하지 않는 것으로 나타났습니다.
즉, 내 안에 key
(예를 들어) 600 개의 자식 개체가 저장되어있는 경우 제대로 작동하지만
하지만 1200 명의 자녀와는 작동하지 않습니다.
그래서 내 질문은입니다 : 키가 저장할 수있는 데이터에는 제한이 있습니까? 어떻게 무시할 수 있습니까?
두 번째 질문 :, 위의 코드, 또는 다음과 같은 일 "더 나은"입니다 방법은?
cache.set
이 작동하지 않는 경우
key = "%s_children" %(parent.name)
value = cache.get(key)
if value is None:
value = parent.children.all()
cache.set(key, value, CACHE_TIMEOUT)
두 번째 버전은 오류가 발생하지 않습니다, 그래서 내 문제에 대한 해결 될 수 있지만 분명히하지 솔루션 수 있습니다.
일반적으로 내 버전에 대해 잊지 맙시다.
업데이트 된 코드 관련 : 두 번째 버전이 더 좋습니다. 설정 또는 가져 오기를 호출 할 때마다 데이터를 염산 처리하고 Base64 인코딩하므로 호출을 최소화하면 성능이 향상됩니다. – Seth