TypeScript上級

上級 TypeScriptで学ぶキャッシュ戦略|ケーススタディ編

導入

ウェブアプリケーションのパフォーマンス向上において、キャッシュ戦略は欠かせない要素です。特にデータベースからの情報取得やAPI呼び出しが頻繁に行われるシステムでは、キャッシュを適切に利用することで、応答時間を短縮し、ユーザー体験を向上させることができます。本記事では、架空のプロジェクトを通じて、TypeScriptを用いたキャッシュ戦略の実装方法を探ります。

教科書レベルの解説(キャッシュ戦略)

重要な概念の整理

キャッシュ戦略は、データの取得方法や保存方法に関する考慮が必要です。キャッシュを利用することで、同じデータを何度も取得する必要がなくなり、システムの負荷を軽減できます。キャッシュの有効期限や更新のタイミング、ストレージの選定など、様々な要素が成功を左右します。

コード例(TypeScript)


class Cache {
    private cache: Map = new Map();

    constructor(private ttl: number) {}

    set(key: string, data: T) {
        const expiry = Date.now() + this.ttl;
        this.cache.set(key, { data, expiry });
    }

    get(key: string): T | null {
        const cached = this.cache.get(key);
        if (cached && cached.expiry > Date.now()) {
            return cached.data;
        }
        this.cache.delete(key);
        return null;
    }
}

コードの行ごとの解説

  1. class Cache<T> { – ジェネリック型を使用したキャッシュクラスの定義。
  2. private cache: Map<string, { data: T; expiry: number }> = new Map(); – キャッシュデータを格納するためのMapを初期化。
  3. constructor(private ttl: number) {} – キャッシュの有効期限を設定するコンストラクタ。
  4. set(key: string, data: T) { – キャッシュにデータを保存するメソッド。
  5. const expiry = Date.now() + this.ttl; – 現在の時刻にTTLを加算し、データの有効期限を設定。
  6. this.cache.set(key, { data, expiry }); – データと有効期限をMapに保存。
  7. get(key: string): T | null { – キャッシュからデータを取得するメソッド。
  8. if (cached && cached.expiry > Date.now()) { – 有効期限内のデータが存在するか確認。
  9. return cached.data; – 有効なデータを返す。
  10. this.cache.delete(key); – 有効期限が切れたデータを削除。
  11. return null; – データが存在しない場合はnullを返す。

ケーススタディ編

架空のプロジェクト「Task Manager」を考えます。このアプリでは、ユーザーがタスクを作成し、進捗を管理します。タスク情報は外部APIから取得され、頻繁に更新されるため、キャッシュを活用することが重要です。

まず、タスク情報を取得するAPI呼び出しを行う際、キャッシュを利用して同じデータを繰り返し取得しないようにします。キャッシュのTTLを設定することで、一定時間内に同じリクエストが発生した場合はキャッシュからデータを返し、API呼び出しを避けます。

ただし、キャッシュ戦略には落とし穴があります。例えば、タスクが更新された際にキャッシュが古い情報を保持していると、ユーザーに誤った情報を提供してしまいます。このため、キャッシュの更新タイミングを適切に設定することが必要です。タスクが更新された際には、関連するキャッシュを無効化するロジックを追加することで、常に最新の情報を提供します。

まとめ

  • キャッシュ戦略を適切に実装することで、アプリケーションのパフォーマンスを大幅に向上させることが可能です。
  • キャッシュの有効期限や更新タイミングを慎重に設計することが、正確なデータ提供に繋がります。