When a particular API processing slow or performing a heavy calculation or have heavy DB queries. One of the solution to optimize the API that comes to our mind is to cache the response for appropriate amount of time. This will help us to improve the performance by overcoming the mentioned issues.
It is also important helper function like this which can be used across codebase should be written in a generic way for reusability of code. The DRY principle
While implementing a function which will hit the cache, we have to consider 2 cases. One what to do in case of hit and another is in case of miss. Incase of hit we can return the data as it is. But in case of miss, we should populate with the right data to avoid next miss. which can be achieved using following code
class CacheHelper def self.get_from_cache(key, callback_method, expire_time, *args) cache_data = Rails.cache.read(key) if cache_data.blank? data = callback_method.call(*args) Rails.cache.write(key, data, expires_in: expire_time) return data end return cache_data end end
This method takes key, callback method to populate data, expiry time and arguments for the method.