キャッシュ無効化戦略
RedisでTTL、ライトスルー、ライトビハインド、イベント駆動の無効化を使い、キャッシュデータを新鮮で一貫した状態に保つ方法を学びます。
「キャッシュ無効化戦略」はCoddyKit上の無料Redis Caching & Messaging (Pub/Sub, Streams)レッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRedis Caching & Messaging (Pub/Sub, Streams)学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Redis Caching & Messaging (Pub/Sub, Streams)コースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Why Invalidation Matters
Caching speeds up reads, but a cache that serves stale data can be worse than no cache at all. Cache invalidation is the discipline of removing or refreshing entries when the underlying source of truth changes.
It is famously hard: there are only two hard things in computer science, and one of them is cache invalidation.
TTL-Based Expiry
The simplest strategy is time-to-live. You accept that data may be stale for at most N seconds.
SET key value EX 60expires after 60 secondsEXPIRE key 60sets a TTL on an existing keyTTL keyshows remaining seconds
SET user:42:profile "...json..." EX 60
TTL user:42:profile
EXPIRE user:42:profile 120Write-Through Caching
In write-through caching, every write goes to both the database and the cache in the same operation. Reads are always fresh, at the cost of slower writes.
The application is responsible for keeping the two in lockstep.
def save_user(user):
db.update(user)
redis.set('user:' + user.id, serialize(user))
return userWrite-Behind Caching
Write-behind (write-back) writes to the cache first and flushes to the database asynchronously. Writes are fast, but you risk data loss if Redis goes down before the flush.
Use a queue or stream to buffer pending writes.
redis.set('order:' + id, data)
redis.lpush('pending_writes', id)Explicit Deletion on Update
The cache-aside + delete pattern: on every update to the database, delete the cached key. The next read repopulates it.
This avoids serving stale data and is simpler than keeping the cache value in sync.
def update_product(p):
db.update(p)
redis.delete('product:' + p.id)Why Delete Beats Update
Deleting the key (instead of overwriting it) avoids a race condition: two concurrent updates could otherwise write values in the wrong order. With deletion, the next read always pulls the latest from the source of truth.
Versioned Keys
Instead of invalidating, bump a version number embedded in the key. Old keys expire naturally via TTL while new reads use the new key.
INCR config:version
GET config:version
SET config:v7:settings "..."Event-Driven Invalidation
Publish an invalidation event whenever data changes. Other application nodes subscribe and clear their local caches. This pairs Redis Pub/Sub with caching.
redis.publish('invalidate', 'user:42')
# subscribers:
redis.subscribe('invalidate')Tag-Based Invalidation
Group related keys under a tag set. When a tag becomes invalid, delete all member keys in one sweep.
SADD tag:user:42 product:1 product:2- On change:
SMEMBERS tag:user:42thenDELeach
SADD tag:user:42 cart:42 wishlist:42
SMEMBERS tag:user:42Avoiding Stampedes
When a hot key expires, many requests may hit the database at once (a cache stampede). Mitigate with a short lock, probabilistic early expiry, or serving slightly stale data while one worker refreshes.
SET lock:user:42 1 NX EX 5Choosing a Strategy
There is no single best approach:
- TTL for tolerable staleness
- Delete-on-write for correctness
- Event-driven for multi-node consistency
- Versioning for bulk config changes
Quick Check
Test your understanding of invalidation strategies.
Recap
You learned the major cache invalidation strategies: TTL expiry, write-through, write-behind, delete-on-write, versioned keys, event-driven, and tag-based invalidation, plus how to avoid cache stampedes. Pick the strategy that matches your tolerance for staleness and your consistency needs.
よくある質問
「キャッシュ無効化戦略」レッスンは無料ですか?
はい。「キャッシュ無効化戦略」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Redis Caching & Messaging (Pub/Sub, Streams)コースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Redis Caching & Messaging (Pub/Sub, Streams)コースには全4レッスンが含まれています。
「キャッシュ無効化戦略」で何を学びますか?
RedisでTTL、ライトスルー、ライトビハインド、イベント駆動の無効化を使い、キャッシュデータを新鮮で一貫した状態に保つ方法を学びます。 ブラウザで直接実行するハンズオンコードでRedis Caching & Messaging (Pub/Sub, Streams)を演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Redis Caching & Messaging (Pub/Sub, Streams)を始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRedis Caching & Messaging (Pub/Sub, Streams)は初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「キャッシュ無効化戦略」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRedis Caching & Messaging (Pub/Sub, Streams)レッスンでコードを書いて実行できますか?
はい。すべてのRedis Caching & Messaging (Pub/Sub, Streams)レッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。