diff options
author | Daniel Schierbeck <dasch@zendesk.com> | 2013-04-15 16:41:27 +0200 |
---|---|---|
committer | Daniel Schierbeck <dasch@zendesk.com> | 2013-05-06 11:38:51 +0200 |
commit | 36d41a15c35e6f4b698931987b2115e221d0fcfa (patch) | |
tree | 14855f1938c45adfb6a64511107ead949ab1fde1 /activesupport/lib/active_support | |
parent | 6023a5049172e2222181881679b56c0e29034c96 (diff) | |
download | rails-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.rb | 28 |
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. |