Есть множество способов достичь того, что вы ищете. Я бы посоветовал не кэшировать ответ для каждого пользователя xxx, поскольку существует множество переменных, связанных с днями и временем, когда трафик будет более напряженным, чем в другие дни. Я бы посоветовал вам спросить себя, каково поведение метода. Нужно ли извлекать какие-то сложные данные или это будет просто подсчет? Если информация в реальном времени не важна, каковы приемлемые временные рамки для кэширования информации?
Если ответ на приведенные выше вопросы можно получить с помощью метрики времени, а не посещения xxx пользователей, то вы можете использовать встроенный Rails.cache,
, определив метод сбора метрик в помощнике, а затем вызвав его из представления:
def method_to_call
Rails.cache.fetch("some_method", expires_in: 1.hour) do
SomeThing.to_cache
end
end
отсюда вы можете прогнозировать свой доступ к API и быть уверенным в своем использовании в течение определенного периода времени, не беспокоясь о том, в какое время дня ваш веб-сайт может быть более загруженным, или о любых неожиданных всплесках использования приложений.
Если вы хотите кэшировать каждое посещение пользователя xxx, я бы настоятельно рекомендовал Redis. Это фантастическое программное обеспечение, невероятно быстрое и масштабируемое. Это хранилище пар ключ-значение, в котором могут храниться данные об уникальных пользователях и просмотрах страниц.
Еще один вопрос, который нужно задать: вы кэшируете для отдельного пользователя или отдельного просмотра страницы? На основе ответа вы можете сохранить идентификатор пользователя или количество просмотров страниц и иметь условную логику для обновления кеша для каждой метрики xxx. Производительность не должна быть слишком большой проблемой, если у вас есть должное усердие, чтобы очищать хранилище каждую неделю или около того, в зависимости от хранимых данных.
Когда вы доберетесь до больших масштабов кэширования, вам, возможно, придется подумать об инфраструктуре размещения экземпляра Redis. Вам нужен выделенный сервер? Является ли докер жизнеспособным вариантом для производственного Redis? Можете ли вы разместить экземпляр Redis в том же экземпляре приложения? Все эти возможные накладные расходы благоприятствуют первоначальному подходу, но, опять же, он зависит от ваших потребностей.
09.08.2020