ホーム 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 などを使うとよいかも。

記事を共有

最近人気な記事