メインコンテンツまでスキップ

Cache の コンセプト: Time to live (TTL)

このレッスンでは、ベストプラクティスや一般的なユースケースを含め、TTL (time to live) の重要な概念について説明します。また、Momento CacheにおけるTTLのデフォルトと制限についても説明します。

Video

トランスクリプト

TTL(Time to Live)とは、キャッシュに保存されているデータの項目に割り当てられる値である。これは、そのデータが期限切れとみなされ、リクエストされた場合にクライアントに返されなくなるまでに、キャッシュにどれだけの期間残っているかを決定するものです。では、なぜTTLが重要なのでしょうか?

さて、キャッシュ内のデータが過度に古くなっている状況を想像してみてほしい。これによって、もはや関連性のない情報がユーザーに表示されることになり、時には深刻な結果を招くこともあります。TTL値を設定することで、一定期間が経過した後にキャッシュ内のデータが削除され、アプリが権威データベースからアイテムをリフレッシュすることを確実に知ることができます。

セッション・トークンの保存は、TTLの良い使用例です。例えば、セッションが長くても30分程度であることを保証したいとしましょう。キャッシュに挿入されるセッショントークンアイテムのTTL値を、セッション生成から30分に設定し、30分経過後にキャッシュがセッショントークンを削除するとします。アプリがトークンの存在をチェックし、キャッシュミスがあった場合、アプリはユーザーが再度ログインしなければならないことを知ります。

アプリがトークンの存在をチェックし、キャッシュミスがあった場合、アプリはユーザーが再度ログインしなければならないことを知ります。しかし、TTL値を設定する際に考慮すべきトレードオフがあります。TTLを設定するのは、データベースから最も新しいバージョンのデータをキャッシュするためだとします。頻繁に読み込まれるデータについて、値を低く設定しすぎたらどうなるでしょうか?その場合、アプリによってキャッシュが頻繁にリフレッシュされ、データベースへの負荷が増加し、その結果パフォーマンスが低下します。

一方、TTL値を高く設定しすぎると、キャッシュ内のデータが古くなり、不正確になる可能性があります。最後の部分は、どのキャッシュ・スタイルを使うかによりますが、それは別のビデオの話題にしましょう。この話題については、説明文(こちら)にリンクを貼っておきます。いずれにせよ、TTL値の適切なバランスを見つけることはあなたのアプリケーションにとって非常に重要であり、ユースケースによってはチューニングに時間がかかるかもしれません。

TTLの意味と使い方がわかったところで、Momento Cacheサービスとの関係について説明します。

Momento Cacheサービスでは、キャッシュに保存されているすべてのアイテムについて、秒単位でtime to liveの値を設定する必要があります。この値を設定する場所は2つあります。1つ目は、アプリがSDKコールでキャッシュ接続オブジェクトをインスタンス化する際にTTL値を渡す方法です。この値はインスタンス化で必須であり、オーバーライドしない限り、すべての書き込み操作で使用されます。

これが2つ目の場所につながる。どのような書き込み操作でも、接続オブジェクトから設定された値を上書きするようにTTL値を設定することができる。こうすることで、必要に応じてすべてのアイテムに独自のTTL値を設定することができます。デフォルトでは、Momento Cacheで設定できるTTLの最大値は24時間です。24時間より長い値を設定しても、キャッシュはその値を24時間に戻します。

結論として、キャッシュ・タイム・トゥ・ライブは、データとキャッシュの正確さと新鮮さを保証するのに役立つ重要な概念です。トレードオフを慎重に検討し、適切なバランスを見つけることで、システムの効率性と最高のパフォーマンスを確保することができます。