【问题标题】:Ignoring some attributes when caching缓存时忽略某些属性
【发布时间】:2019-10-13 22:46:50
【问题描述】:

在 Rails 6 应用程序中,我正在向用户列表添加一些缓存。

目前,我的代码看起来像

# users/index.html.erb

<table>
  <tbody>
    <%= render @users %>
  </tbody>
</table> 

# users/_user.html.erb

<% cache(user)do %>
<tr>
  <td>
    <%= user.name %>
   </td>
   <td>
     <%= user.status %>
   </td>
</tr>

缓存有效,但只要updated_at 属性更改,片段就会失效。

但是,为了优化它,我想仅在显示的属性之一发生更改时使其无效。例如,当用户更新她自己的密码时,我不想要一个新片段。

实现这一目标的首选方法是什么?下面的代码似乎有效,但我想确保它没有 dropbacks。

<% cache [user.name, user.status] do %>

在键中包含多个属性时,这也是首选方式吗?即

   <% cache [user.name, user.status, user.email, user.role, user.whatever] do %>

此外,假设我想缓存整个表。我应该使用哪个键? @users 真的不行。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    渲染@users集合时可以添加cached: truehttps://guides.rubyonrails.org/caching_with_rails.html#collection-caching

    我真的不明白在那个优化级别优化单个用户缓存的意义(用户多久修改一次密码或其他不重要的属性?)。我不认为没有优化对你的表现有真正的影响。您是否对此进行了测试,或者您只是想这样做?如果没有必要,请不要过度设计事物,我敢打赌,还有更好的东西可以优化,影响更大。

    【讨论】:

    • 谢谢。用户将每 3 个月更新一次密码。这是监管要求。而其他属性几乎不会改变。
    • 阻止每 3 个月 1 次查询听起来并不值得这样做。就我个人而言,我不会那样做,这取决于你,但我相信在访问特定用户缓存之前,你会有很多更好的地方来提高性能并产生更大的影响。
    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多