API 레퍼런스 — Cache 메서드

API 레퍼런스 — Cache 메서드

DiskCache의 API를 실제 호출 시그니처로 정리했어요. 튜토리얼에서 다룬 연산 외에도 일관성 검사, 캐시 용량 관리, 메모이제이션 데코레이터 같은 기능을 볼게요.

출처: https://grantjenks.com/docs/diskcache/api.html

diskcache.Cache(directory=None, timeout=60, disk=<class 'diskcache.core.Disk'>, **settings) — 디스크와 파일 기반 캐시예요. directory는 캐시 디렉터리, timeout은 SQLite 연결 타임아웃, disk는 직렬화에 쓰는 Disk 타입, settingsDEFAULT_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=Truef(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) 마운트에서는 권장되지 않아요.

더 알아보기