Home > OS >  How to set an expiry on a cached Ruby search?
How to set an expiry on a cached Ruby search?

Time:06-14

I have a function, which returns a list of ID's, in the Rails caching guide I can see that an expiration can be set on the cached results, but I have implemented my caching somewhat differently.

def provide_book_ids(search_param)
      @returned_ids ||= begin
        search = client.search(query: search_param, :reload => true)
        search.fetch
        search.options[:query] = search_str
        search.fetch(true)
        search.map(&:id)
      end
    end

What is the recomennded way to set a 10 minute cache expiry, when written as above?

CodePudding user response:

def provide_book_ids(search_param)
  @returned_ids = Rails.cache.fetch("zendesk_ids", expires_in: 10.minutes) do
      search = client.search(query: search_param, :reload => true)
      search.fetch
      search.options[:query] = search_str
      search.fetch(true)
      search.map(&:id)
    end
 end

I am assuming this code is part of some request-response cycle and not something else (for example a long running worker or some class that is initialized once in your app. In such a case you wouldn't want to use @returned_ids directly but instead call provide_book_ids to get the value, but from I understand that's not your scenario so provided approach above should work.

  • Related