From 62023884f76c108127c8966f4d67bb717338dd66 Mon Sep 17 00:00:00 2001 From: Ignatius Reza Date: Fri, 18 Aug 2017 09:32:19 +0900 Subject: add instrumentation for read_multi currently it's not possible to know what the hit rates are from read_multi --- .../lib/active_support/cache/mem_cache_store.rb | 40 ++++++++++------------ 1 file changed, 18 insertions(+), 22 deletions(-) (limited to 'activesupport/lib/active_support/cache') diff --git a/activesupport/lib/active_support/cache/mem_cache_store.rb b/activesupport/lib/active_support/cache/mem_cache_store.rb index df8bc8e43e..00a3670d64 100644 --- a/activesupport/lib/active_support/cache/mem_cache_store.rb +++ b/activesupport/lib/active_support/cache/mem_cache_store.rb @@ -91,28 +91,6 @@ module ActiveSupport end end - # Reads multiple values from the cache using a single call to the - # servers for all keys. Options can be passed in the last argument. - def read_multi(*names) - options = names.extract_options! - options = merged_options(options) - - keys_to_names = Hash[names.map { |name| [normalize_key(name, options), name] }] - - raw_values = @data.get_multi(keys_to_names.keys) - values = {} - - raw_values.each do |key, value| - entry = deserialize_entry(value) - - unless entry.expired? || entry.mismatched?(normalize_version(keys_to_names[key], options)) - values[keys_to_names[key]] = entry.value - end - end - - values - end - # Increment a cached value. This method uses the memcached incr atomic # operator and can only be used on values written with the :raw option. # Calling it on a value not stored with :raw will initialize that value @@ -170,6 +148,24 @@ module ActiveSupport end end + # Reads multiple entries from the cache implementation. + def read_multi_entries(names, options) + keys_to_names = Hash[names.map { |name| [normalize_key(name, options), name] }] + + raw_values = @data.get_multi(keys_to_names.keys) + values = {} + + raw_values.each do |key, value| + entry = deserialize_entry(value) + + unless entry.expired? || entry.mismatched?(normalize_version(keys_to_names[key], options)) + values[keys_to_names[key]] = entry.value + end + end + + values + end + # Delete an entry from the cache. def delete_entry(key, options) rescue_error_with(false) { @data.delete(key) } -- cgit v1.2.3