スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

キャッシュ機構-2

巷で噂のドロリッチ飲んでみました。

・・・うめぇ!



さて、前回キャッシュの仕組み(と言うか何と言うか)について
掲載したので、今回はキャッシュの実装方法について少々。

能書きの前に、まずは実装例をどうぞ。
# ** データ作成
def create_data
# ~ 時間のかかる処理 ~
return result # 作成したデータを返す
end

# ** データ取得
def data
if @__data == nil # キャッシュがなければ
@__data = create_data # キャッシュを作る
end
return @__data # キャッシュを返す
end
data メソッドでは、
 ・ @__data という変数が nil の場合、作成したデータを
   @__data に格納し、@__data を返す
 ・ @__data が nil でなければ、そのまま @__data を返す
という処理を行います。
つまり、@__data がキャッシュとして機能するわけです。
(変数名の頭に __ が付いているのは個人的な趣味です)

この処理のポイントは、Ruby の
「未使用の(代入していない)変数は nil」
という仕様です。
@__data に何も入っていない(キャッシュが作られていない)場合、
@__data は nil となるので、この場合にキャッシュを作成して
あげれば良いわけです。
一度キャッシュを作れば、以降 @__data != nil となるので、
二度目以降はキャッシュ作成をスキップするようになります。

ただし、この方法は
「作成した(キャッシュに入る)データが nil を取り得る」
場合にはあまり適していません。
(キャッシュが nil の場合、毎回キャッシュ作成ルートを通る)
こうした場合には、キャッシュの判定を少し変えてあげます。
例えば、
def data
unless @__data_cached
@__data = create_data
@__data_cached = true
end
return @__data
end
こんな感じで、キャッシュ作成済みというフラグを作ってみたり。
(nil は偽なので、unless nil は成立します)
スポンサーサイト

コメントの投稿

非公開コメント

アクセスカウンタ
プロフィール

TOMY

  • Author:TOMY
  • Kamesoft

    ・社会人見習い Lv3
    ・ミク廃
    ・ほむらー
    ドット絵はちゅねミク (C)袴っ娘推進委員会
カレンダー
07 ≪│2017/08│≫ 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
最近の記事
カテゴリー
最近のコメント
RSSフィード
ブログ内検索
Clover Days
ALcot『Clover Day's』応援中!
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。