Установка ключа кэша коллекции без нескольких последующих запросов - PullRequest
3 голосов
/ 06 июля 2019

Я только что начал кэшировать свое приложение и немного застрял. У меня есть запрос, который зависит от области. Область действия собирает последние (x) сообщения, созданные на странице.

Rails.cache.fetch('homepage/posts') do
  posts = Post.by_latest

  render json: posts
end

Вот что мне трудно понять. Поскольку я хочу убедиться, что на сайте отображаются последние сообщения, я не хочу вручную устанавливать срок действия или дату. Вместо этого я хотел бы закончить кеш при создании или уничтожении нового поста. Вот другая дилемма. Я думал о том, чтобы сделать обратный вызов в моей модели Post, но все немного перемешивается, когда я хочу закончить кеш других ключей, но все хотят выполнить то же самое.

def flush_cache
  Rails.cache.delete('homepage/posts')
  Rails.cache.delete('posts')
  ...
end

Я хотел очистить кэш более динамично, как если бы вы использовали один объект ... где ключ кэша состоит из атрибута updated_at объекта и истекает всякий раз, когда изменяется. Я нахожу трудным делать с коллекцией все же. Генерирование ключа кеша из запроса приведет к самому запросу, что пойдет на убыль общей цели кеширования:

Rails.cache.fetch(Post.by_latest.cache_key) do
  posts = Post.by_latest

  render json: posts
end

Любая помощь будет оценена.

1 Ответ

1 голос
/ 06 июля 2019

Я не думаю, что вы используете его совершенно правильно, Rails автоматически достаточно хорошо обрабатывает кэширование коллекций.

Это стандартная настройка для кэширования коллекции

posts = Rails.cache.fetch(Post.by_latest) do
  Post.by_latest
end

render json: posts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...