API 레퍼런스 — Cache 메서드
API 레퍼런스 — Cache 메서드
DiskCache의 API를 실제 호출 시그니처로 정리했어요. 튜토리얼에서 다룬 연산 외에도 일관성 검사, 캐시 용량 관리, 메모이제이션 데코레이터 같은 기능을 볼게요.
diskcache.Cache(directory=None, timeout=60, disk=<class 'diskcache.core.Disk'>, **settings) — 디스크와 파일 기반 캐시예요. directory는 캐시 디렉터리, timeout은 SQLite 연결 타임아웃, disk는 직렬화에 쓰는 Disk 타입, settings는 DEFAULT_SETTINGS 중 원하는 값을 받아요.
주요 메서드를 살펴볼게요.
add(key, value, expire=None, read=False, tag=None, retry=False)—set과 비슷하지만 키가 없을 때만 추가해요. 한 번에 하나의 add만 성공하는 원자적 연산이에요.read=True면 value는 바이너리로 읽은 파일 객체여야 해요.check(fix=False, retry=False)— DB와 파일시스템 일관성을 점검해요. 테스트나 사후 오류 분석에 쓰고,fix=True면 불일치를 고쳐요. 검사 중에는 DB에 쓰기 잠금이 걸려요.clear(retry=False)— 캐시의 모든 항목을 제거해요.cull(retry=False)— 캐시 용량(volume)이size_limit보다 작아질 때까지 항목을 제거해요.decr(key, delta=1, default=0, retry=False)— 키 값을 감소시켜요. 원자적이고, Memcached와 달리 음수 값도 지원해 0 아래로 내려갈 수 있어요.evict(tag, retry=False)— 일치하는tag가 붙은 항목을 모두 제거해요.expire(now=None, retry=False)— 만료된 항목을 제거해요.get(key, default=None, read=False, expire_time=False, tag=False, retry=False)— 값을 조회하고, 키가 없으면default를 반환해요.incr(key, delta=1, default=0, retry=False)— 키 값을 증가시켜요.iterkeys(reverse=False)— DB 정렬 순서로 키를 순회해요.memoize(name=None, typed=False, expire=None, tag=None, ignore=())— 메모이제이션 데코레이터예요. 같은 인자로 반복 호출하면 함수를 다시 실행하지 않고 캐시에서 결과를 찾아줘요.typed=True면f(3)과f(3.0)을 다른 호출로 취급해요.pop(key, default=None, version=None, expire_time=False, tag=False, retry=True)— 항목을 제거하고 값을 반환해요. 원자적이라incr와 함께 쓰면 장기 실행 시스템에서 카운팅·통계 수집에 정확하게 쓰기 좋아요.set(key, value, timeout=<object object>, version=None, read=False, tag=None, retry=True)— 값을 설정해요.timeout을 주면 그 키에만 그 타임아웃이 적용되고, 기본 캐시 타임아웃은 300초예요.
주의할 점도 있어요. 기본 diskcache.Disk 직렬화는 키와 값 모두에 pickle을 쓰는데, 튜플 같은 컨테이너 타입은 pickle 결과가 불일치할 수 있어요. 키의 일관된 직렬화가 필요하면 JSONDisk 같은 대안 Disk 타입을 쓰는 걸 고려해요. 또 DiskCache는 SQLite를 사용하므로 네트워크 파일시스템(NFS) 마운트에서는 권장되지 않아요.