instance method
fetch_multi
Ruby on Rails 8.0.4
Since v4.1.16Signature
fetch_multi(*names)
Fetches data from the cache, using the given keys. If there is data in the cache with the given keys, then that data is returned. Otherwise, the supplied block is called for each key for which there was no data, and the result will be written to the cache and returned. Therefore, you need to pass a block that returns the data to be written to the cache. If you do not want to write the cache when the cache is not found, use #read_multi.
Returns a hash with the data for each of the names. For example:
cache.write("bim", "bam") cache.fetch_multi("bim", "unknown_key") do |key| "Fallback value for key: #{key}" end # => { "bim" => "bam", # "unknown_key" => "Fallback value for key: unknown_key" }
You may also specify additional options via the options argument. See #fetch for details. Other options are passed to the underlying cache implementation. For example:
cache.fetch_multi("fizz", expires_in: 5.seconds) do |key| "buzz" end # => {"fizz"=>"buzz"} cache.read("fizz") # => "buzz" sleep(6) cache.read("fizz") # => nil
Parameters
-
namesrest
Source
# File activesupport/lib/active_support/cache.rb, line 596
def fetch_multi(*names)
raise ArgumentError, "Missing block: `Cache#fetch_multi` requires a block." unless block_given?
return {} if names.empty?
options = names.extract_options!
options = merged_options(options)
keys = names.map { |name| normalize_key(name, options) }
writes = {}
ordered = instrument_multi :read_multi, keys, options do |payload|
if options[:force]
reads = {}
else
reads = read_multi_entries(names, **options)
end
ordered = names.index_with do |name|
reads.fetch(name) { writes[name] = yield(name) }
end
writes.compact! if options[:skip_nil]
payload[:hits] = reads.keys.map { |name| normalize_key(name, options) }
payload[:super_operation] = :fetch_multi
ordered
end
write_multi(writes, options)
ordered
end
Defined in activesupport/lib/active_support/cache.rb line 596
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveSupport::Cache::Store