Кеш в производстве

В настоящее время я тестирую кеши в моем приложении (Dalli gem). И происходит странная вещь. Я кеширую список, связанный с current_user. Но когда я тестирую приложение с другой учетной записью (с разными браузерами), кэши смешиваются.

Например: я запускаю действие, которое изменяет кэши User1, и эти кэши применяются к учетной записи User2.

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

Примечание: я пропустил дайджест, чтобы он заработал, я не совсем уверен в их потребностях. Так что я не совсем уверен, что это может быть отправной точкой моей проблемы.

Я поделюсь своим кодом, если вы хотите больше подробностей о том, что я делаю.

Мой код:

Пользователь (модель):

class User < ApplicationRecord
  has_many :users_group, dependent: :destroy
  has_many :groups, through: :users_group
  has_many :favorit_groups, dependent: :destroy
  has_many :fav_groups, through: :favorit_groups, class_name: "Group", source: :group

  def cached_favgroups
    Rails.cache.fetch([self, "fav_groups"]) {fav_groups.to_a}
  end

  def cached_groups
    Rails.cache.fetch([self, "groups"]) {groups.to_a}
  end

Вид (сиденав):

<li class="list_groups_favorit">
<% cache 'cache_groups_fav_all', skip_digest: true do %>
  <% current_user.cached_favgroups.each do |group| %>
    <% cache group, skip_digest: true do %>
      <%= render 'groups/group', group: group%>
    <% end %>
  <% end %>
<% end %>
</li>
<li class="list_groups">
<% cache 'cache_groups_all', skip_digest: true do %>
  <% current_user.cached_groups.each do |group| %>
    <% cache group, skip_digest: true do %>
      <%= render 'groups/group', group: group%>
    <% end %>
  <% end %>
<% end %>
</li>

GroupController:

def favorit
  FavoritGroup.where(group_id: @group.id).where(user_id: current_user.id).first_or_create
  # Cache 
  Rails.cache.delete(current_user.cache_key+"/fav_groups")
  Rails.cache.delete(current_user.cache_key+"/groups")
  expire_fragment('cache_groups_fav_all')
  expire_fragment('cache_groups_all')
  expire_fragment(@group)
  # Cache
  respond_to do |format|
    format.html { redirect_back }
    format.js { render 'groups/js/favorit' }
  end 
end 

def unfavorit
  FavoritGroup.where(group_id: @group.id).where(user_id: current_user.id).delete_all
  # Cache
  Rails.cache.delete(current_user.cache_key+"/fav_groups")
  Rails.cache.delete(current_user.cache_key+"/groups")
  expire_fragment('cache_groups_fav_all')
  expire_fragment('cache_groups_all')
  expire_fragment(@group)
  # Cache
  respond_to do |format|
    format.html { redirect_back }
    format.js { render 'groups/js/unfavorit' }
  end
end 

0 ответов

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