【メムキャッシュディー】

Memcached とは?

最終更新:
💡 アプリが、使い直せる結果を一時保存する

キーと値で一時的なデータを保存するキャッシュシステム。アプリによる読み出しと更新、データ消失への備え、有効期限や複数台構成の注意点を解説します。

📌 このページのポイント
Memcached:アプリがキャッシュを使うアプリキーを指定Memcached値を一時保存GET値元データ・DB等再取得できる結果を作るない場合はアプリが取得結果をSETで保存期限・追い出し・障害更新時の扱いも設計キャッシュがなくても、結果を作り直せるように
キャッシュに値があれば利用し、なければアプリがDB等から取得して保存します。Memcached自身がDBへ問い合わせたり、サーバー間で自動複製したりする意味ではありません。
ひよこ ひよこ
Memcachedは、データベースの代わりになる?
ペンギン先生 ペンギン先生
通常は、再取得できる結果を一時保存するキャッシュとして使う。例えば記事一覧の問い合わせ結果を保存し、次回はその値を使う。消えると困る唯一のデータを預ける保存先とは分けて考えよう。
ひよこ ひよこ
データベースの前に置けば、自動で速くなる?
ペンギン先生 ペンギン先生
そうではない。アプリに取得と保存の処理を組み込む。キーでキャッシュを読んで、あれば使い、なければアプリがDBなどから取得してキャッシュへ保存する。Memcached自身がDBへ問い合わせるわけではないんだ。
ひよこ ひよこ
データはいつまで残るの?
ペンギン先生 ペンギン先生
有効期限を指定できるが、容量不足による追い出しや障害でもなくなる。期限を設定しない場合も、ずっと残る保証にはならない。キャッシュがなくても、必要な結果を再取得できるようにするよ。
ひよこ ひよこ
再起動すると、必ず全部消える?
ペンギン先生 ペンギン先生
通常の運用では消失を想定する。ただし対応バージョンと設定には、正常な再起動でキャッシュを復元するWarm Restart機能もある。障害に強いDBになるわけではなく、再起動中の更新や設定の変更にも条件があるんだ。
ひよこ ひよこ
古い記事一覧が返ることはない?
ペンギン先生 ペンギン先生
あり得るよ。DBを更新しても、保存済みのキャッシュは自動では変わらない。許容できる古さに合わせて期限を決め、更新時に削除・上書きするなどの処理を考える。TTLだけで常に最新になるとは限らない。
ひよこ ひよこ
台数を増やせば、データも自動で複製される?
ペンギン先生 ペンギン先生
分散と複製は別だよ。複数のサーバーを使う場合は、クライアントやプロキシ側でキーの送り先を分ける。標準のサーバー同士が自動でデータを複製したり、障害を通知し合ったりする仕組みではない。
もっと詳しく知りたい人へ

有効期限の0と、30日を超える値は?

公式ユーザーガイドでは、0は期限なし、30日までの値は秒数、30日を超える値はUnix時刻として扱うと説明しています。例えば長い期間を秒数のつもりで渡すと、意図と違う時点になることがあります。使うクライアントの指定方法も確認します。期限なしでも追い出しや消失は起こり得ます。

公開サーバーとして、誰でも接続できるようにしていい?

公式の構成ガイドは、Memcachedをインターネットや信頼できない利用者に直接公開しないよう説明しています。必要なアプリだけが接続できるネットワーク・待ち受け先・通信制御を設計します。認証があるから無条件に公開してよい、というものではありません。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Memcached」って出てきたら「アプリケーションからキーを指定して値を取得・保存するキャッシュシステム」と思えばだいたいOK!
📖 おまけ:英語の意味
「Memcached」 = メモリを中心に使うキャッシュの名称
💬 キャッシュ用のサーバープログラムです。名前にcacheが入る通り、再取得や再計算ができる結果を一時保存する用途で理解します。唯一のデータ保存先となるデータベースとは区別します。

参考資料

← 用語集にもどる