An easy way to manage caching and flushing of Ruby objects. Especially useful when you are speeding a very slow API or page.
Add this line to your application's Gemfile:
gem 'catch_cache'
And then execute:
$ bundle
Or install it yourself as:
$ gem install catch_cache
class ServiceWithAVerySlowQuery
include CatchCache::Cache
def query
lead = get_some_lead
catch_then_cache("lead_timeline_logs_#{lead.id}") do
# Your very slow query which
# returns a bunch of Ruby objects
end
end
end
In your AR model:
class LoanApplication < ActiveRecord::Base
include CatchCache::Flush
belongs_to :lead
# Everytime the :after_commit AR callback is called,
# the Redis cache with id "lead_timeline_logs_#{lead.id}"
# is going to be flushed
cache_id :lead_timeline_logs, after_commit: -> { flush_cache!: -> { lead.id } }
end
Use :flush_all
to clear the cache for all the keys with the suffix defined in cache_id
In your AR model:
class AdminUser < ActiveRecord::Base
include CatchCache::Flush
# Everytime the :after_commit AR callback is called,
# all the Redis caches with suffix "lead_timeline_logs"
# are going to be flushed
cache_id :lead_timeline_logs, after_commit: :flush_all!
end
The gem is available as open source under the terms of the MIT License.