diff options
author | Gabriel Sobrinho <gabriel.sobrinho@gmail.com> | 2018-02-06 12:16:42 -0200 |
---|---|---|
committer | Jeremy Daer <jeremydaer@gmail.com> | 2018-02-23 12:53:01 -0800 |
commit | 1077ae96b34b5a1dfbf10ee0c40b1ceb1eb6b30b (patch) | |
tree | 49a011bf2eb2f2d302841249178887e317fe06b3 /activesupport/lib | |
parent | 5ecbeda0e225e4961977b5c516088cf12d92319f (diff) | |
download | rails-1077ae96b34b5a1dfbf10ee0c40b1ceb1eb6b30b.tar.gz rails-1077ae96b34b5a1dfbf10ee0c40b1ceb1eb6b30b.tar.bz2 rails-1077ae96b34b5a1dfbf10ee0c40b1ceb1eb6b30b.zip |
Caching: MemCache and Redis stores use local cache for multi-reads
Fixes #31909.
Closes #31911.
Diffstat (limited to 'activesupport/lib')
-rw-r--r-- | activesupport/lib/active_support/cache/strategy/local_cache.rb | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/cache/strategy/local_cache.rb b/activesupport/lib/active_support/cache/strategy/local_cache.rb index aaa9638fa8..e17308f83e 100644 --- a/activesupport/lib/active_support/cache/strategy/local_cache.rb +++ b/activesupport/lib/active_support/cache/strategy/local_cache.rb @@ -54,6 +54,10 @@ module ActiveSupport @data[key] end + def read_multi_entries(keys, options) + Hash[keys.map { |name| [name, read_entry(name, options)] }.keep_if { |_name, value| value }] + end + def write_entry(key, value, options) @data[key] = value true @@ -116,6 +120,19 @@ module ActiveSupport end end + def read_multi_entries(keys, options) + return super unless local_cache + + local_entries = local_cache.read_multi_entries(keys, options) + missed_keys = keys - local_entries.keys + + if missed_keys.any? + local_entries.merge!(super(missed_keys, options)) + else + local_entries + end + end + def write_entry(key, entry, options) if options[:unless_exist] local_cache.delete_entry(key, options) if local_cache |