その他
    ホーム 技術発信 DoRuby 記憶の固執 dalli をDBレコードに使ったときのメモ

    記憶の固執 dalli をDBレコードに使ったときのメモ

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    Webアプリを高速化するのに memcached を使うことがある。

    今回は Ruby on Rails 上で memcached 簡単に行うことができる gem に dalli を使ったときのメモ。

     環境

    OS (cat /etc/redhat-release )

    CentOS Linux release 7.1.1503 (Core)

    kernel (uname -r)

    3.10.0-229.1.2.el7.x86_64

    memcached

    rpm -qa memcached
    	memcached-1.4.15-9.el7.x86_6

    ruby

    ruby -v
    	ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
    	rails -v
    	Rails 4.2.2
    	gem list pry
    	
    	 LOCAL GEMS ***
    	
    	pry (0.10.1)
    	pry-rails (0.3.4)
    	
    	gem list dalli
    	
    	 LOCAL GEMS ***
    	
    	dalli (2.7.4)

     dalli インストール例

    dnf install memcached

    gem install dalli

     rails アプリケーションの設定ファイルの記載

    config/environments/development.rb に下記行を追記。

    ※ 本番環境なら config/environments/production.rb

    config.cache_store = :dalli_store

     基本的な使い方

    キャッシュを作成する

    Rails.cache.write(key, obj)

    キャッシュを読み込む

    Rails.cache.read(key)

    キャッシュがあれば読み込み、なければ作成し読み込む

    Rails.cache.delete(key)
    	Rails.fetch(key, obj,  expires_in: cache_tol_sec) do
    	  obj
    	end

    ※ キャッシュの寿命を指定するには write や fetch の第3引数に秒数を指定する。

     気をつけること

    ひとつのキーでひとつの値を保持するのでdevlopmentや test など複数環境で使用することを考慮しておく。

    テーブル名や引数、sql文などをキーにしているときにテスト実施後に開発環境で表示不具合が発生した。memcache はキーバリューなので不自然でないが rails の開発時に環境ごとの db の切り替えに気を使ったコーディングをすることが少ないので注意。この度はキーに “#{Rails.env.first}_” の接頭辞をつけるようにして解決。

    キーはシンボルで指定しても文字列で作成されるので意図せぬ書き換えに注意。

    Rails.cache.write(:key_str, obj1)
    	Rails.cache.write('key_str', obj2)

    Hash と異なる。

    DBレコードごとにキャッシュを作成する場合、レコードの更新・削除にあわせてキャッシュも更新すること。

    after_save や after_destroy などを使うとよいかも。