Rails.cache
/icons/hr.icon
tips
bin/rails dev:cache でキャッシュを有効化してからrails s
/icons/hr.icon
read
write
fetch
exist?
read_multi
fetch_multi
write_multi
increment
/icons/hr.icon
fetch / fetch_multi
参照と書き込みを同時に行う
ブロックはキャッシュミスだった場合の書き込み値
code:ruby
# 複数のキーを同時に取得して、存在しないキーに対してはブロックの値を書き込む
# expires_inで書き込んだ値の期限を設定
cache.fetch_multi("bim", "unknown_key", expires_in: 3.minutes) do |key|
end
# skip_nilオプションで書き込みブロックがnilの場合は書き込みをしない
cache.fetch('foo') { nil }
cache.fetch('bar', skip_nil: true) { nil }
cache.exist?('foo') # => true
cache.exist?('bar') # => false
read / read_multi
参照のみ
指定したキーの中でキャッシュにデータが存在しない場合、そのキーは戻り値のハッシュに含まれません。このため、キャッシュミスのキーを特定するには、元のキーリストと戻り値のハッシュのキーのリストを比較します。
code:ruby
# 複数のキャッシュを取得して変換する
# k => vのセットを変換して、配列になる Array<X>
Rails.cache.read_multi(*ids).map { |key, url| ... }
# 例えば、"key1" と "key3" にキャッシュが存在し、"key2" がキャッシュミスの場合
# { "key1" => "value1", "key3" => "value3" }
Rails.cache.read_multi("key1", "key2", "key3")
write / write_multi
すべてのキャッシュストアがwrite_multiをサポートしているわけではない
code:ruby
# Haskを渡して一気に書き込む
Rails.cache.write_multi({
"key1" => "value1",
"key2" => "value2",
"key3" => "value3"
})
users = {
"user_1" => "Alice",
"user_2" => "Bob",
"user_3" => "Charlie"
}
# write_multi で複数のデータを一度にキャッシュに書き込む
Rails.cache.write_multi(users, expires_in: 10.minutes)
increment
アトミック操作
操作が同時に複数のプロセスによって行われる場合でもデータの一貫性が保たれる
指定したキーがキャッシュに存在しない場合、新しいキーが作成され、その値が設定されます。例えば、キャッシュに存在しないキーに対してincrement("new_key", 3)を呼び出すと、そのキーの値は3になります。