mirror of https://github.com/rails/rails
fix LocalCache#read_multi_entries
In cache stores prepending `LocalCache`, serialized `Entry` instances are stored in `LocalCache::LocalStore`. This speeds up hot key lookups without a network roundtrip in a context of a single given request. However, with these entries being stored in their serialized form, `#read_multi_entries` returns them directly to cache consumers. Instead, we will now deserialize these entries first.
This commit is contained in:
parent
4d4497b42e
commit
3933a41ad5
|
@ -123,6 +123,9 @@ module ActiveSupport
|
||||||
return super unless local_cache
|
return super unless local_cache
|
||||||
|
|
||||||
local_entries = local_cache.read_multi_entries(keys)
|
local_entries = local_cache.read_multi_entries(keys)
|
||||||
|
local_entries.transform_values! do |payload|
|
||||||
|
deserialize_entry(payload).value
|
||||||
|
end
|
||||||
missed_keys = keys - local_entries.keys
|
missed_keys = keys - local_entries.keys
|
||||||
|
|
||||||
if missed_keys.any?
|
if missed_keys.any?
|
||||||
|
|
|
@ -286,4 +286,13 @@ module LocalCacheBehavior
|
||||||
assert_equal false, @cache.read(key)
|
assert_equal false, @cache.read(key)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_local_cache_should_deserialize_entries_on_multi_get
|
||||||
|
keys = Array.new(5) { SecureRandom.uuid }
|
||||||
|
values = keys.index_with(true)
|
||||||
|
@cache.with_local_cache do
|
||||||
|
assert @cache.write_multi(values)
|
||||||
|
assert_equal values, @cache.read_multi(*keys)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue