GC 오버헤드를 낮게 유지하면서 힙에 많은 항목을 저장하는 빠른 Go용 동시성 지원 퇴거형 인메모리 캐시입니다.
dgraph-io/ristretto
비용 기반 퇴출과 TinyLFU 입장 정책을 갖춘, 빠르고 동시성 높은 Go용 메모리 제한 캐시 라이브러리입니다.
- 스타
- 7,005
- 포크
- 456
- 열린 이슈
- 21
- 마지막 커밋
- 지난달
어떤 프로젝트인가요?
Ristretto는 여러 고루틴이 같은 캐시를 읽고 쓰며 경합이 병목이 될 수 있는 워크로드를 위해 만든 Go용 인메모리 캐시 라이브러리입니다. Dgraph 내부에서 경합 없는 캐시로 사용하기 위해 개발되었습니다.
퇴출에는 SampledLFU 정책을, 입장에는 TinyLFU를 사용합니다. 두 정책을 함께 적용해 메모리 오버헤드를 작게 유지하면서(빈도 카운터당 약 12비트) 높은 캐시 적중률을 목표로 합니다. 각 항목에는 사용자가 정의한 비용이 적용되므로, 크고 가치 있는 항목 하나가 작은 항목 여러 개를 퇴출할 수 있습니다. 캐시 크기는 항목 수가 아니라 총비용을 기준으로 제한됩니다.
API는 간단합니다. NumCounters, MaxCost, BufferItems를 설정한 다음 Set, Get, Del을 호출하면 됩니다. 처리량과 적중률 통계를 제공하는 메트릭은 선택 사항입니다. Ristretto는 단일 프로세스용 라이브러리이며 분산형이 아닙니다. Go 1.21 이상이 필요하고, v2 모듈은 제네릭을 사용합니다.
핵심 기능
- 01큰 항목이 더 작은 항목 여러 개를 밀어낼 수 있도록 비용을 기준으로 퇴출합니다.
- 02높은 캐시 적중률을 위해 SampledLFU 퇴출과 TinyLFU 입장 정책을 함께 사용합니다.
- 03여러 고루틴에서 동시에 안전하게 사용할 수 있습니다.
- 04처리량과 적중률을 보여 주는 메트릭을 선택적으로 사용할 수 있습니다.
- 05Config[K, V] 타입 매개변수를 사용하는 제네릭 v2 API를 제공합니다.
활용 사례
- 반복 작업을 줄이기 위해 Go 서비스에서 계산 결과나 데이터베이스 행을 캐싱합니다.
- 항목 수가 아니라 항목의 총비용을 기준으로 캐시 메모리 사용량을 제한합니다.
- Badger와 Dgraph처럼 프로세스 내부 캐시가 필요한 임베디드 스토리지 엔진이나 데이터베이스를 구축합니다.
빠른 시작
- 1
Go 1.21 이상을 설치하세요
- 2
go get으로 프로젝트에 Ristretto를 추가하세요
go get github.com/dgraph-io/ristretto/v2
사용 전 알아둘 점
- v1 API는 이전 버전입니다. v2에서는 generics를 사용하고 인터페이스도 약간 달라 기존 코드를 수정해야 할 수 있습니다.
- 새 항목에 대한 Set 호출은 경합이 발생하거나 admission policy에 따라 삭제될 수 있으므로 저장이 보장되지 않습니다.
토픽
자주 묻는 질문
- ristretto은(는) 무엇인가요?
- 비용 기반 퇴출과 TinyLFU 입장 정책을 갖춘, 빠르고 동시성 높은 Go용 메모리 제한 캐시 라이브러리입니다. Ristretto는 여러 고루틴이 같은 캐시를 읽고 쓰며 경합이 병목이 될 수 있는 워크로드를 위해 만든 Go용 인메모리 캐시 라이브러리입니다. Dgraph 내부에서 경합 없는 캐시로 사용하기 위해 개발되었습니다.
- ristretto은(는) 무료로 사용할 수 있나요? 라이선스는 무엇인가요?
- ristretto은(는) Apache-2.0 라이선스의 오픈소스입니다. 상업용 제품에 사용하기 전에 라이선스 조건을 확인하세요.
- ristretto은(는) 아직 유지보수되고 있나요?
- 6개월 이내 업데이트. ristretto의 마지막 커밋은 2026년 9월 21일입니다.
- ristretto은(는) 어디에 사용할 수 있나요?
- 반복 작업을 줄이기 위해 Go 서비스에서 계산 결과나 데이터베이스 행을 캐싱합니다. 항목 수가 아니라 항목의 총비용을 기준으로 캐시 메모리 사용량을 제한합니다. Badger와 Dgraph처럼 프로세스 내부 캐시가 필요한 임베디드 스토리지 엔진이나 데이터베이스를 구축합니다.
- ristretto는 어떻게 설치하나요?
- Go 1.21 이상을 설치하세요 go get으로 프로젝트에 Ristretto를 추가하세요: go get github.com/dgraph-io/ristretto/v2
- ristretto은(는) 어디서 받을 수 있나요?
- 소스 코드와 설치 방법은 GitHub에 있습니다: https://github.com/dgraph-io/ristretto
요약은 프로젝트 README를 바탕으로 AI가 작성했습니다. GitHub 통계는 매일 갱신됩니다.
관련 프로젝트
lodash에서 영감을 받은, 문자열·슬라이스·날짜/시간·네트워킹·암호화 등을 위한 700개 이상의 재사용 가능한 Go 유틸리티 함수 라이브러리입니다.
캐시, 데이터 구조 서버, 문서 저장소, 벡터 데이터베이스, 메시지 브로커로 사용되는 인메모리 데이터 저장소입니다.
Redis와 Memcached API를 호환하며 두 시스템을 대체해 바로 사용할 수 있도록 설계된 인메모리 데이터 저장소입니다.
Rust로 작성된 Redis·Valkey 호환 인메모리 키-값 서버로, 전문 검색과 벡터 검색 기능을 기본 제공합니다.
메인 이벤트 루프를 막지 않고 CPU 집약적 작업을 실행하는 Node.js 워커 스레드 풀로, 큐와 취소 기능, 실행 통계를 제공합니다.