大量のエントリをヒープ上に保持しながらGC負荷を抑える、Go向けの高速な並行処理対応・自動削除型インメモリキャッシュ。
dgraph-io/ristretto
Go向けの高速な並行メモリ制限型キャッシュライブラリ。コストベースの追い出しとTinyLFUによる登録判定に対応。
- スター
- 7,005
- フォーク
- 457
- 未解決の Issue
- 21
- 最終コミット
- 先月
これは何?
RistrettoはGo向けのインメモリキャッシュライブラリです。多数のgoroutineが同じキャッシュを読み書きし、競合がボトルネックになりかねないワークロード向けに作られています。Dgraph内部で競合のないキャッシュを実現するために開発されました。
追い出しにはSampledLFUポリシー、登録判定にはTinyLFUを採用しており、頻度カウンターあたり約12ビットという小さなメモリオーバーヘッドで高いヒット率を目指します。各アイテムにはユーザー定義のコストを設定できるため、コストの大きなアイテムが、単一のエントリーとして数えられるのではなく、複数の小さなアイテムを追い出すこともできます。キャッシュサイズはアイテム数ではなく、合計コストで制限されます。
APIはシンプルです。NumCounters、MaxCost、BufferItemsを設定し、Set、Get、Delを呼び出します。オプションのメトリクスでは、スループットやヒット率の統計を確認できます。Ristrettoは単一プロセス向けのライブラリであり、分散型ではありません。Go 1.21以降が必要で、v2モジュールではジェネリクスを使用しています。
主な機能
- 01コストベースの追い出しにより、価値の高い大きなアイテムが複数の小さなアイテムを追い出せます。
- 02SampledLFUによる追い出しとTinyLFUによる登録判定を組み合わせ、高いヒット率を目指します。
- 03多数のgoroutineから並行して安全に使用できます。
- 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 とは?
- Go向けの高速な並行メモリ制限型キャッシュライブラリ。コストベースの追い出しとTinyLFUによる登録判定に対応。 RistrettoはGo向けのインメモリキャッシュライブラリです。多数のgoroutineが同じキャッシュを読み書きし、競合がボトルネックになりかねないワークロード向けに作られています。Dgraph内部で競合のないキャッシュを実現するために開発されました。
- ristretto は無料で使えますか?ライセンスは?
- ristretto は Apache-2.0 ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
- ristretto は今もメンテナンスされていますか?
- 半年以内に更新あり。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互換性を備え、両方のドロップイン置き換えを目指すインメモリデータストア。
RedisおよびValkey互換のRust製インメモリ・キーバリューサーバー。全文検索とベクトル検索を標準搭載。
Node.jsのメインイベントループをブロックせずにCPU負荷の高いタスクを実行できる、キュー、キャンセル、実行時間統計に対応したWorkerスレッドプール。