Кэш не возвращает результаты в цикле при изменении
Чтобы уменьшить потребление памяти при вызове 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
не возвращать результат после заполнения кеша фоновым заданием?