이 페이지에서는 Google Cloud 콘솔을 사용하여 애플리케이션에 Memcache 서비스를 구성 및 모니터링하는 방법을 설명합니다. 또한 App Engine Memcache Python API를 사용하여 캐시된 값을 설정하고 검색하는 방법을 설명하며, 비교 및 설정 기능을 사용하여 해당 Memcache 키에 대한 동시 쓰기 요청을 처리하는 방법도 설명합니다. Memcache에 대한 자세한 내용은 Memcache 개요를 참조하세요.
Memcache 구성
- Google Cloud 콘솔에서 Memcache 페이지로 이동합니다.
Memcache 페이지로 이동 사용하려는 Memcache 서비스 수준을 선택합니다.
- 공유(기본값) - 가급적 최대한의 캐시 용량을 확보하여 제공합니다.
- 전용 - 캐시 크기의 GB 시간 단위로 요금이 청구되며, 애플리케이션 전용으로 할당되는 고정 캐시 용량을 제공합니다.
사용 가능한 서비스 등급에 대한 자세한 내용은 Memcache 개요를 참조하세요.
값 캐싱 및 검색
값 캐싱
키 값이 없는 경우에만 add()
를 사용하여 선택적 만료 시간과 함께 키 값을 추가합니다.
memcache.add(key="[KEY]", value="[VALUE]", time=[EXPIRATION_TIME])
예를 들어 raining
값을 weather_USA_98105
키에 추가하고 만료 시간을 값이 쓰여진 시점으로부터 1시간으로 설정하려면 다음을 실행합니다.
memcache.add(key="weather_USA_98105", value="raining", time=3600)
Memcache Python API 문서에서 add()
및 기타 값 설정 방법을 자세히 알아보세요.
다른 값 캐싱 예는 Memcache 예를 참조하세요.
캐시된 값 조회
get()
을 사용하여 단일 키 값을 조회합니다.
memcache.get(key="[KEY]")
예를 들어 weather_USA_98105
키의 값을 가져오려면 다음을 실행합니다.
memcache.get(key="weather_USA_98105")
Memcache Python API 문서에서 get()
및 기타 값 조회 방법을 자세히 알아보세요.
Google Cloud 콘솔에서 Memcache 모니터링
- Google Cloud 콘솔에서 Memcache 페이지로 이동합니다.
Memcache 페이지로 이동 - 다음 보고서를 확인합니다.
- Memcache 서비스 수준: 애플리케이션이 공유 서비스 수준을 사용하고 있는지 아니면 전용 서비스 수준을 사용하고 있는지를 표시합니다. 프로젝트 소유자는 두 수준 간에 전환할 수 있습니다. 자세한 내용은 서비스 수준을 참조하세요.
- 적중률: 캐시에서 제공된 데이터 요청의 비율과 더불어 캐시에서 제공된 데이터 요청의 총 개수를 보여줍니다.
- 캐시의 항목 수
- 가장 오래된 항목의 유지 기간: 가장 오래된 캐시된 항목의 유지 기간입니다. 항목의 유지 기간은 항목이 사용(읽기 또는 쓰기)될 때마다 재설정됩니다.
- 총 캐시 크기
다음과 같은 작업을 수행할 수 있습니다.
- 새 키: 캐시에 새 키를 추가합니다.
- 키 찾기: 기존 키를 검색합니다.
- 캐시 삭제: 캐시에서 모든 키-값 쌍을 삭제합니다.
(전용 Memcache에만 해당) 핫 키 목록을 살펴봅니다.
- '핫 키'는 Memcache에서 수신 QPS(초당 쿼리 수)가 100을 초과하는 키입니다.
- 이 목록에는 최대 100개의 핫 키가 QPS가 많은 순서대로 포함됩니다.
동시 쓰기 처리
비교 및 설정 기능을 사용하여 여러 요청에서 같은 Memcache 키에 쓰는 작업을 처리하려면 다음 단계를 따르세요.
Client
객체를 인스턴스화합니다.- 재시도 루프를 사용합니다(재시도 횟수 제한이 있고 지수 백오프를 사용하는 것이 좋음).
- 재시도 루프 내에서
for_cas
매개변수를True
로 설정하고gets()
또는get_multi()
를 사용하여 키를 가져옵니다. - 재시도 루프 내에서
cas()
또는cas_multi()
를 사용하여 키 값을 업데이트합니다.
- 재시도 루프 내에서
다음 스니펫은 비교 및 설정 기능을 사용하는 한 가지 방법을 보여줍니다.
def bump_counter(key):
client = memcache.Client()
while True: # Retry loop
counter = client.gets(key)
if counter is None: raise KeyError('Uninitialized counter')
if client.cas(key, counter+1):
break
루프 없이는 이 코드가 경합 상태를 감지하기만 하고 방지하지는 못하기 때문에 재시도 루프가 필요합니다. Memcache 서비스가 서로 다른 클라이언트 인스턴스 두 개 이상이 경합 상태에 관여하는 경우 여기에 표시된 패턴(즉, gets()
및 cas()
사용)에 사용되면 cas()
작업을 실행한 첫 번째 인스턴스만 성공하고(True
반환) 두 번째 인스턴스(및 이후 인스턴스)가 실패합니다(False
반환).
이 샘플 코드에서는 같은 카운터에 경합이 많이 발생하는 최악의 시나리오에서 무한 루프를 방지하기 위해 재시도 횟수에 제한을 설정해야 합니다. 이러한 경합이 발생할 수 있는 상황의 예로는 Memcache 서비스가 실시간으로 처리할 수 있는 것보다 더 많은 요청이 카운터를 업데이트하려고 하는 경우를 들 수 있습니다.
비교 및 설정에 대한 자세한 내용은 Memcache 개요를 참조하세요.
다음 단계
- Memcache 개요에서 Memcache 자세히 알아보기
- Memcache 예시를 통해 Python에서 Memcache를 사용하는 코드 예시 확인