aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support
diff options
context:
space:
mode:
authorDaniel Schierbeck <dasch@zendesk.com>2013-04-15 16:41:27 +0200
committerDaniel Schierbeck <dasch@zendesk.com>2013-05-06 11:38:51 +0200
commit36d41a15c35e6f4b698931987b2115e221d0fcfa (patch)
tree14855f1938c45adfb6a64511107ead949ab1fde1 /activesupport/lib/active_support
parent6023a5049172e2222181881679b56c0e29034c96 (diff)
downloadrails-36d41a15c35e6f4b698931987b2115e221d0fcfa.tar.gz
rails-36d41a15c35e6f4b698931987b2115e221d0fcfa.tar.bz2
rails-36d41a15c35e6f4b698931987b2115e221d0fcfa.zip
Allow fetching multiple values from the cache at once
Add a simple API for fetching a list of entries from the cache, where any missing entries are computed by a supplied block.
Diffstat (limited to 'activesupport/lib/active_support')
-rw-r--r--activesupport/lib/active_support/cache.rb28
1 files changed, 28 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/cache.rb b/activesupport/lib/active_support/cache.rb
index 6c220ae625..b1ab5570a8 100644
--- a/activesupport/lib/active_support/cache.rb
+++ b/activesupport/lib/active_support/cache.rb
@@ -352,6 +352,34 @@ module ActiveSupport
results
end
+ # 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.
+ #
+ # Options are passed to the underlying cache implementation.
+ #
+ # Returns an array with the data for each of the names. For example:
+ #
+ # cache.write("bim", "bam")
+ # cache.fetch_multi("bim", "boom") {|key| key * 2 }
+ # #=> ["bam", "boomboom"]
+ #
+ def fetch_multi(*names)
+ options = names.extract_options!
+ options = merged_options(options)
+
+ results = read_multi(*names, options)
+
+ names.map do |name|
+ results.fetch(name) do
+ value = yield name
+ write(name, value, options)
+ value
+ end
+ end
+ end
+
# Writes the value to the cache, with the key.
#
# Options are passed to the underlying cache implementation.