Я пишу Rails 5 JSON API.Как кэшировать верхние N сообщений, упорядоченных по рейтингу?
У меня есть действие, которое возвращает топ N сообщения пользователя на основе среднего рейтинга. Чтобы достичь низкого времени отклика, я денормализовал свою базу данных таким образом, чтобы posts
столбец average_rating
.
Я также кэширование каждый запрос следующим образом:
# posts_controller.rb
def top
quantity = params[:quantity]
if quantity.to_i > 0
render json: {
posts: cached_top_posts(quantity)
}, status: :ok
else
render json: '', status: :unprocessable_entity
end
end
def cached_top_posts(quantity)
Rails.cache.fetch(['top', quantity], expires_in: 1.hour) do
Post.limit(quantity).as_json(only: [:title, :content, :average_rating])
end
end
(Приказ average_rating
в самой модели)
Я знаю, что это далеко от оптимального.
Хотя это значительно сокращает время отклика при запросе того же количества постов, было бы гораздо лучше, если бы, когда он уже кэшируются топ 1000 сообщений, это не будет кэш 100 сообщений, но вместо этого получит первый 100 сообщений из кэш 1000.
Что такое хороший способ достичь этого?