0Pricing
Caching Strategies: Redis + CDN + Edge Computing · レッスン

Thundering Herdへの対策

人気のキーの有効期限が切れたときにキャッシュスタンピードが発生する仕組みと、リクエストの集約、ロック、早期再計算、ジッター付きTTLによって防ぐ方法を学びます。

「Thundering Herdへの対策」はCoddyKit上の無料Caching Strategies: Redis + CDN + Edge Computingレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCaching Strategies: Redis + CDN + Edge Computing学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Caching Strategies: Redis + CDN + Edge Computingコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

The Thundering Herd Problem

When a hot cache key expires, every concurrent request misses at once and rushes the origin together. This cache stampede (or thundering herd) can overwhelm the database in an instant.

Why It Is Dangerous

A single popular item serving 10,000 requests/second normally hits the cache. The moment it expires, those 10,000 requests all hit the database simultaneously, often causing a spike that takes the origin down.

Cause: Synchronized Expiry

The root cause is many keys (or many requests on one key) expiring at the same moment. The fix strategies all aim to spread or serialize the resulting recomputation.

Fix 1: Request Coalescing

Let only the first request recompute the value; everyone else waits for that result. This is also called single-flight.

in_flight = {}

def get(key, compute):
    if key in in_flight:
        return 'waiting for in-flight result'
    in_flight[key] = True
    return compute()

print(get('hot', lambda: 'computed once'))

Fix 2: Mutex Lock

Use a distributed lock (e.g. a Redis key with NX) so only one process recomputes. Others briefly serve stale data or retry after a short wait.

lock = None

def acquire_lock(holder):
    global lock
    if lock is None:
        lock = holder
        return True
    return False

print(acquire_lock('worker-1'))
print(acquire_lock('worker-2'))

Fix 3: Jittered TTL

Add randomness to each entry's TTL so they do not all expire together. A base TTL plus random jitter spreads recomputation over time.

import random
base_ttl = 300
jitter = random.randint(0, 60)
print('TTL for this entry:', base_ttl + jitter, 'seconds')

Fix 4: Early Recomputation

Refresh a value before it expires. When an entry is close to its TTL, a background task (or a probabilistic check) recomputes it so it never actually goes cold for users.

Probabilistic Early Expiration

A clever trick: as a key nears expiry, give each request a small, growing probability of recomputing early. One lucky request refreshes the value while others still serve the cached copy.

import random
time_left = 5
beta = 1.0
should_refresh = random.random() < (1 / max(time_left, 1)) * beta
print('Refresh early?', should_refresh)

Fix 5: Serve Stale While Revalidating

Return the expired value immediately while a background job fetches fresh data. Users get a fast (slightly stale) response and the origin sees only one refresh request.

Combining Defenses

Real systems layer these: jittered TTLs to avoid synchronized expiry, plus coalescing or a lock to serialize the inevitable misses, plus stale-while-revalidate for the best user experience.

Watch for Cache Penetration Too

A related issue is penetration: requests for keys that never exist always miss and hit the origin. Cache negative results (or use a bloom filter) so missing keys are also absorbed.

Quick Check

Which technique prevents a cache stampede by ensuring only one request recomputes the value while the rest wait for that result?

Recap

You learned to defend against the thundering herd:

  • Stampedes happen when hot keys expire and many requests miss at once.
  • Coalescing and locks serialize recomputation.
  • Jittered TTLs and early recomputation spread the load.
  • Stale-while-revalidate keeps responses fast.

Combine these to keep your origin safe under load.

よくある質問

「Thundering Herdへの対策」レッスンは無料ですか?

はい。「Thundering Herdへの対策」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Caching Strategies: Redis + CDN + Edge Computingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Caching Strategies: Redis + CDN + Edge Computingコースには全4レッスンが含まれています。

「Thundering Herdへの対策」で何を学びますか?

人気のキーの有効期限が切れたときにキャッシュスタンピードが発生する仕組みと、リクエストの集約、ロック、早期再計算、ジッター付きTTLによって防ぐ方法を学びます。 ブラウザで直接実行するハンズオンコードでCaching Strategies: Redis + CDN + Edge Computingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Caching Strategies: Redis + CDN + Edge Computingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCaching Strategies: Redis + CDN + Edge Computingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Thundering Herdへの対策」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCaching Strategies: Redis + CDN + Edge Computingレッスンでコードを書いて実行できますか?

はい。すべてのCaching Strategies: Redis + CDN + Edge Computingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. よく使われるキャッシュパターン
  2. キャッシュ無効化戦略
  3. キャッシュ追い出しポリシー
  4. Thundering Herdへの対策
← Caching Strategies: Redis + CDN + Edge Computingに戻る