Repolode
allegro

allegro/bigcache

大量のエントリをヒープ上に保持しながらGC負荷を抑える、Go向けの高速な並行処理対応・自動削除型インメモリキャッシュ。

スター
8,172
フォーク
620
未解決の Issue
101
最終コミット
13 日前

これは何?

BigCacheは、ガベージコレクターによってプログラムの処理速度が落ちないよう、大量のエントリを保持できる設計のGo向けインメモリキャッシュライブラリです。エントリはGCが個別に走査しないbyte sliceとしてヒープ上に保持されるため、多くのユースケースでは値をbyte列にシリアライズしてから保存します。

キャッシュは並行アクセスに対応するためシャーディングされており、設定可能なLifeWindowの経過後にエントリを削除します。CleanWindowでは、期限切れのエントリを削除する頻度を指定します。想定される負荷に基づいてメモリを事前確保することも、上限を設けずに拡張させることもでき、オプションでHardMaxCacheSize(MB単位)の上限を設定できます。期限切れ、容量制限、明示的な削除によってエントリが削除された際に呼び出されるコールバックも設定できます。

このプロジェクトにはGo 1.12以降が必要で、キャッシュを基盤とするHTTPサーバーパッケージも別途含まれています。ハッシュの衝突には対応していません。同じハッシュを持つ新しい項目を追加すると、既存の項目が上書きされます。

主な機能

  • 01GCの停止時間を短縮するため、エントリをヒープ上のbyte sliceとして保存します。
  • 02読み書きの並行処理に対応したシャーディング設計です。
  • 03LifeWindowとCleanWindowによる時間ベースの削除に対応します。
  • 04HardMaxCacheSizeでメモリ使用量に任意の上限を設定できます。
  • 05期限切れ、容量超過、削除時に呼び出されるコールバックを設定できます。
  • 06キャッシュを基盤とするHTTPサーバーパッケージが含まれています。

ユースケース

  • 長時間稼働するGoサービスで、シリアライズ済みデータを数GB規模でキャッシュする。
  • 数百万件のキャッシュエントリを保持するサービスで、GC負荷を抑える。
  • 有効期限を設定できるローカルのプロセス内キャッシュを提供する。

クイックスタート

  1. 1

    Go プロジェクトに BigCache v3 モジュールを追加する

  2. 2

    デフォルト設定(有効期間は10分)でキャッシュを作成する

  3. 3

    エントリをバイトスライスとして設定・取得する

使う前に知っておきたいこと

  • エントリはバイトスライスにシリアライズする必要があるため、多くの用途では追加のシリアライズ/デシリアライズ処理が必要です。
  • BigCache はハッシュ衝突を処理しません。ハッシュが衝突すると、新しいアイテムが既存の値を上書きします。

トピック

よくある質問

bigcache とは?
大量のエントリをヒープ上に保持しながらGC負荷を抑える、Go向けの高速な並行処理対応・自動削除型インメモリキャッシュ。 BigCacheは、ガベージコレクターによってプログラムの処理速度が落ちないよう、大量のエントリを保持できる設計のGo向けインメモリキャッシュライブラリです。エントリはGCが個別に走査しないbyte sliceとしてヒープ上に保持されるため、多くのユースケースでは値をbyte列にシリアライズしてから保存します。
bigcache は無料で使えますか?ライセンスは?
bigcache は Apache-2.0 ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
bigcache は今もメンテナンスされていますか?
活発にメンテナンス中。bigcache の最終コミットは 2026年10月12日 です。
bigcache は何に使えますか?
長時間稼働するGoサービスで、シリアライズ済みデータを数GB規模でキャッシュする。 数百万件のキャッシュエントリを保持するサービスで、GC負荷を抑える。 有効期限を設定できるローカルのプロセス内キャッシュを提供する。
bigcache のインストール方法は?
Go プロジェクトに BigCache v3 モジュールを追加する デフォルト設定(有効期間は10分)でキャッシュを作成する エントリをバイトスライスとして設定・取得する
bigcache はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/allegro/bigcache

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト