久々にjava

キャッシュの仕組みを作る

DBから値を取得する場合、マスター系などデータが変わることがないデータを取得するのに、毎回DBアクセスするとパフォーマンスが悪い。
そこで、キャッシュの仕組みを作って、キャッシュからデータを取得し、パフォーマンスを上げる。

  • HashMapにキーとオブジェクトを格納する
  • オブジェクトを取得する仕組み
    • 1.HashMapから取得
    • 2.HashMapから取得できなければ、リソース(DB,ファイル等)から取得
    • 3.取得したオブジェクトをHashMapに格納

メモリの節約

上記の仕組みのままだとMapのサイズが大きくなってしまう。
頻繁にアクセスされるオブジェクトは良いが、アクセス回数が少ないものまでメモリ上に持つのはメモリの無駄使いになる。
キャッシュのサイズを決めて、サイズがあふれたらアクセス回数が少ないものから削除する

  • オブジェクトをキャッシュに格納するタイミングで、キーをリストに格納しておく
  • 新たにオブジェクトをキャッシュに格納する時に、キャッシュのサイズをチェックする
  • すでにキャッシュのサイズが設定したサイズに達している場合
    • 1.リストの先頭(アクセスされた時間が一番古いもの)を取得
    • 2.取得したキーのキャッシュを削除
    • 3.リストの先頭を削除
    • 4.今回追加するオブジェクトをキャッシュに追加
    • 5.今回追加するオブジェクトのキーをリストに格納

参考URL:
http://www5b.biglobe.ne.jp/~psoft/development/cache/cache2.html