Кэш не возвращает результаты в цикле при изменении

Чтобы уменьшить потребление памяти при вызове API (с использованием ruby-grape), я пытаюсь вычислить данные в фоновом задании (отложенное задание, в конечном итоге Sidekiq), заполнить кеш Redis и вернуть результаты.

Вот DelayedJob, который заполняет кеш

      class LotService
  def self.cache_recently_removed_lot_ids
    lot_ids = Lot.ids_removed_from_syndication_in_last(60)
    lot_ids.concat Lot.ids_hidden_in_last(60)
    lot_ids.concat Lot.ids_unpublished_in_last(60)
    Rails.cache.write(:recently_removed_lot_ids, lot_ids, expires_at: DateTime.current + 1.hour)
  end
end

Вот конечная точка API. В рамках10.timesитерации результаты Cache никогда не возвращаются. Если я сделаю последующий вызов конечной точки API, результаты будут там.

      lot_ids = []
10.times do |iteration|
  lot_ids = Rails.cache.read(:recently_removed_lot_ids)
  break if lot_ids.present?

  # Run on first iteration and if job isn't already queued
  LotsRecentlyRemovedCacheJob.perform_later if
    !LotsRecentlyRemovedCacheJob.already_queued? && iteration.zero?
  sleep 2
end
content_type 'application/json'
lot_ids.present? ? lot_ids.sort! : []

Зачем повторяющиеся вызовыRails.cache.readне возвращать результат после заполнения кеша фоновым заданием?

0 ответов

Другие вопросы по тегам