ローリングデプロイでキャッシュに泣かないための最短ルート — キャッシュキーを「バージョン化」せよ

要約

ローリングデプロイ中に古いインスタンスと新しいインスタンスが混在すると、キャッシュの互換性違反や予期せぬ不整合が発生する。解決策はシンプルで効果的:キャッシュキーにバージョン(ネームスペース)を組み込み、移行を安全に管理すること。

この記事を読むべき理由

日本のサービスでも、ブルー/グリーンやローリングデプロイが一般化しており、キャッシュ不整合による障害は重大な顧客影響を与えます。少しの設計変更でダウンタイムやトラブルシューティングを大幅に減らせるため、実務で即使える手法を押さえておくべきです。

詳細解説

問題の本質

バージョン化の考え方

運用上のポイント

実例(Redisでのキー命名)

// Node.js (redis)
const CACHE_VERSION = process.env.CACHE_VERSION || 'v1';
function userCacheKey(userId) {
  return `myapp:${CACHE_VERSION}:user:${userId}`;
}
await redis.set(userCacheKey(123), JSON.stringify(userObj), 'EX', 3600);

デプロイ運用例(手順)

  1. 新バージョンを設定(例: v2)してデプロイ(新インスタンスは v2 を書く)。
  2. 読み取りルールを段階的に切り替えるか、新コードはまず v2 を読み書きするようにする。
  3. モニタで旧キーアクセスがゼロになったら旧キーを削除する(スクリプトで自動化)。
  4. 必要に応じて短期間は「新->旧フォールバック」を組むが、長期運用は避ける。

注意点

実践ポイント

引用元

📌 引用元:
How Versioned Cache Keys Can Save You During Rolling Deployments
Hacker News Score: | Comments: