キャッシュパターンと有効期限
Cache-Asideパターンを適用し、有効期限を設定します。
「キャッシュパターンと有効期限」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
キャッシュパターン
キャッシュの読み書き方法を定めるものがパターンです。Web アプリで最も一般的なのはcache-asideで、コードがデータソースの周辺でキャッシュを管理します。
Cache-Aside パターン
Cache-aside(遅延読み込み)は3つの手順で動作します。キャッシュを確認し、キャッシュミスの場合はデータソースから読み込んでキャッシュに格納し、その値を返します。キャッシュは必要になったときに格納されます。
async Task<string> GetForecastAsync(string city)
{
string key = $"forecast:{city}";
string cached = await _cache.GetStringAsync(key);
if (cached is not null) return cached;
string fresh = await _api.LoadForecastAsync(city);
await _cache.SetStringAsync(key, fresh);
return fresh;
}有効期限が不可欠な理由
キャッシュされたデータは古くなる可能性があります。有効期限を設定すると、一定期間後にエントリが自動的に削除されるため、次回の読み取りで最新データを再読み込みできます。これにより、性能とデータの鮮度のバランスを取れます。
絶対有効期限
絶対有効期限は、利用状況に関係なく、決められた時点でエントリを削除します。データが既知の期間内でのみ有効な場合に使用してください。
var options = new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
};スライディング有効期限
スライディング有効期限は、アクセスのたびにタイマーをリセットします。エントリは定期的に使用されている限り保持されますが、一定期間アクセスがないと削除されます。セッションのようなデータに適しています。
var options = new DistributedCacheEntryOptions
{
SlidingExpiration = TimeSpan.FromMinutes(5)
};両方の組み合わせ
両方を設定することもできます。スライディング有効期限によって頻繁に使用されるデータを保持しつつ、絶対有効期限によって最大保持期間を保証し、最終的に必ず更新されるようにできます。
var options = new DistributedCacheEntryOptions
{
SlidingExpiration = TimeSpan.FromMinutes(5),
AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1)
};Set でオプションを適用する
エントリ自身に有効期限ポリシーを持たせるには、オプションを SetStringAsync(または SetAsync)の第3引数として渡します。
await _cache.SetStringAsync(key, fresh, options);ライトスルーと無効化
元のデータが変更されたときは、キャッシュを削除または更新して、読み取りで古い値が返されないようにします。Cache-aside では通常、書き込みと同時に対象キーに対して RemoveAsync を実行します。
await _repository.UpdateForecastAsync(city, value);
await _cache.RemoveAsync($"forecast:{city}");キャッシュスタンピードの回避
人気のあるキーの有効期限が切れると、多数のリクエストが同時に再読み込みを行うことがあります(スタンピード)。短時間のロック、少しランダム化した有効期限、バックグラウンド更新などで対策し、1つのリクエストだけがエントリを再構築するようにします。
有効期限の値を選ぶ
データの変更頻度と、許容できるデータの古さを基準に期間を選んでください。参照データには長い TTL を設定できますが、頻繁に変化するデータには短い TTL またはイベントベースの無効化が必要です。
キャッシュミスのコスト
キャッシュミスが発生するたびにデータソースの読み込みコストがかかるため、ヒット率を最大化できるようにキーと TTL を設計してください。ヒット率とミス率を監視し、時間をかけてキャッシュを調整します。
クイックチェック
キャッシュパターンと有効期限をテストしてみましょう。
まとめ
cache-aside パターンでは、キャッシュを確認し、ミスした場合にデータを読み込んでキャッシュに格納します。絶対有効期限は固定された時点で削除し、スライディング有効期限はアクセス時にリセットします。DistributedCacheEntryOptions を使って両方を組み合わせられます。書き込み時には RemoveAsync で無効化し、スタンピードを防止してください。アクセスパターンと許容できるデータの古さを基準に、TTL とキーを調整します。
よくある質問
「キャッシュパターンと有効期限」レッスンは無料ですか?
はい。「キャッシュパターンと有効期限」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「キャッシュパターンと有効期限」で何を学びますか?
Cache-Asideパターンを適用し、有効期限を設定します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「キャッシュパターンと有効期限」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- IDistributedCache抽象化
- Redisへの接続
- キャッシュパターンと有効期限
- シリアライズされたオブジェクトのキャッシュ