Add improved cache hits for ActiveRecord::Relation collections #25
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Sometimes queries can be very complex and populating models from queries with many includes take
up the majority of time. After checking the cache, it is than obvious populating all these models was not
necessary as we have a hit. Why not checking the cache with a simple query to build the cache-key
and only fire the complex query for those models, that do not exist in the cache?
For these cases you can paste the ActiveRecord::Relation and
cache_collection!
will:unscope all
includes
for the initial query to build all cache_key's (make sure you usejoins
forstatements that are use in
where
)gets the result from cache with
Rails.cache.read_multi
for existing cache_key hitsgets all missed hits from the database with complex includes and all fields
builds the block with all data
uses
Rails.cache.write_multi
if available to populate the cache with the missed valuesjson.cache_collection! Post.includes(:author) do |post|
json.partial! 'post', :post => post
end