Кэширование фрагментов Rails с персонализацией

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

Я могу либо:

  1. Фрагмент кэширует статическую часть и обслуживает персонализированную часть отдельно. Это кажется довольно простым.

  2. Кэшируйте партию, возможно, в memcached или CloudFront, сохраняйте имя пользователя в сеансе и используйте JavaScript для извлечения имени пользователя из сеанса и персонализации страницы на стороне клиента.

Каков наилучший вариант? Желательно исходя из личного опыта подобных ситуаций.

1 ответ

Попробуй это:

  ##in user.rb to cache user

 after_save :invalidate_cache

  def self.serialize_from_session(key, salt)
    single_key = key.is_a?(Array) ? key.first : key
    Rails.cache.fetch("user:#{single_key}") do
      User.where(:id => single_key).entries.first
    end
  end


  def invalidate_cache
    Rails.cache.delete("user:#{id}")
  end

Кредит: Rails Devise: Как я (mem) кеширую запросы базы данных устройства для объекта пользователя?

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