読者です 読者をやめる 読者になる 読者になる

ActiveSupport::Cacheを簡易KVSとして使う

ruby

KVS的なものを使いたいんだけどmemcachedを立てるほどではないって事ありますよね?
そんなときはRailsのフラグメントキャッシュで使われてるActiveSupport::Cacheでファイルストレージを使ってみてはどうでしょうか?

require 'rubygems'
require 'active_support'

include ActiveSupport::Cache

fs = ActiveSupport::Cache.lookup_store(:file_store, "tmp") # tmpディレクトリを格納先に指定
fs.write("key123","value123") #Stringを保存
fs.write("key456",{:hoge => "fuga"}) #Hashを保存

p fs.read("key123") # "value123"
p fs.read("key456") # {:hoge=>"fuga"}

ちなみにtmpディレクトリ以下はこんな感じにサブディレクトリが作成されています。

$ tree tmp
tmp
├── 1E0
│ └── 8F0
│     └── key123
└── 1E9
    └── A10
        └── key456

4 directories, 2 files

同一ディレクトリに大量のファイルを置くとアクセス速度が低下してしまうのですが、それを防止するためにサブディレクトリを作ってるのかな?
keyを探したりワークディレクトリをクリアしたり、詳しい情報はこちらのドキュメントを御覧ください。
http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html