log

日記です

キャッシュという技術

とりあえず書く。

DBの情報をキャッシング

一度DBに問い合わせた情報は、変数やキャッシュサーバーにキャッシングを行い、その値を参照しましょう、そうすれば次からはDBに問い合わせる手間が省ける。という技術。

方法

  • Applicationスコープに保存して、Webアプリ全体で共有
  • データ取得クラスのメンバとしてCacheもをたす
    • サーバーをクラスタリングするとき、各サーバーでApplicationスコープのレプリケーションが必要じゃまいか(何かそういうのあるのかなー)
    • 簡単なキャッシュにはいいけど、気を付けて使わないと痛い目見そう
  • phpだとAPC使う
  • memcachedとか外部のキャッシュサーバー使う
    • 外部にキャッシュのデータを持たすことで、複数サーバーがいても大丈夫
  • Ehcache、Terracottaとゆーのがあるみたいだ


しっかりやりたいなら、別途キャッシュサーバーを設ける事が、ベストプラクティスとし定着しているっぽいです(ネット流し見調べ)

実装のイメージ

初回アクセス時
Web App ⇔ キャッシュ ⇔ DB
次回アクセス時
Web App ⇒ キャッシュ
更新系クエリ
Web App ⇔ キャッシュ、DB

//あくまでイメージ
//ローカルキャッシュの場合
public class DB操作クラス {
  Map<Integer, Map<String, String>> cache = new HashMap<Integer, Map<String, String>>();
  public Map<String, String> getデータ(Integer id) {
    data = cache.get(id);
    if(data == null) {
      data = データ取得処理;
      cache.put(id, data);
    }
    return data;
}


データがあったら、そのまま返す。無かったらDB問い合わせ、って感じ。
多分、外部キャッシュサーバー使っても流れは同じ。


こりゃいいわー!と思った。今度試す!