过期的缓存片段无效

3

我正在尝试缓存一个侧边栏。其中包含两个组列表(1:收藏的组,2:其他组)

我的缓存方法:

1.将这两个组列表缓存到我的用户模型中

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

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

2. 缓存整个列表并在每个组下面显示

  <% cache 'cache_all_groups_fav' do %>
    <% current_user.cached_favgroups.each do |group| %>
      <% cache group do %>
        <%= render 'groups/group', group: group %>
      <% end %>
    <% end %>
  <% end %>

  <% cache 'cache_all_groups' do %>
    <% current_user.cached_groups.each do |group| %>
      <% cache group do %>
        <%= render 'groups/group', group: group %>
      <% end %>
    <% end %>
  <% end %>

3. 将缓存过期到我的 Groups/Controller 中

def favorit
  FavoritGroup.where(group_id: @group.id).where(user_id: current_user.id).first_or_create
  Group.where(group_id: @group.id).where(user_id: current_user.id).delete_all
  expire_fragment('cache_all_groups_fav')
  expire_fragment('cache_all_groups')
  expire_fragment('cached_favgroups')
  expire_fragment('cached_groups')
  expire_fragment('group')
  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
  Group.where(group_id: @group.id).where(user_id: current_user.id).first_or_create
  expire_fragment('cache_all_groups_fav')
  expire_fragment('cache_all_groups')
  expire_fragment('cached_favgroups')
  expire_fragment('cached_groups')
  expire_fragment('group')
  respond_to do |format|
    format.html { redirect_back }
    format.js { render 'groups/js/unfavorit' }
  end
end 

注意:为了实现这一点,我将使用存储缓存的Ruby2.4(Rails 5.1.4)“dally”。
问题:expire_fragment方法不起作用。
你有任何想法吗?这里可能会出现什么问题?
你对自己的缓存策略是否有类似的操作?
1个回答

1
你应该在前端使用俄罗斯套娃缓存进行缓存。
当任何分组记录更新时,缓存将自动失效。

谢谢你的评论,@Daniel,我正在处理! - jacques Mesnet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接