【Rails】我试图用易懂的方式总结缓存

现金是什么?

在请求时保存数据,并在下次发生相同请求时重新利用保存的数据。

由于这样,就不再需要重新生成数据,从而提高性能。
使用缓存的地方不需要访问数据库并发出查询了。

1. 缓存的保存位置

在Rails的缓存功能中,有多个选项可用作缓存存储位置(缓存存储区)。

    1. 文件存储

 

    1. 内存存储

 

    1. 内存缓存

 

    Redis

除了其他一些选项以外,其中四个似乎最具代表性,一般使用Redis。
顺便提一下,在我的工作中,我使用一个叫做dalli的gem作为缓存存储的设置,将Memchache用作缓存存储。

在Rails应用程序中,可以进行以下配置。

config.cache_store = :dalli_store  # :memory_store, :redis_cache_store など設定可能。

1. Rails缓存的类型

基于何种内容进行缓存?以下有三种选项。

    1. 页面缓存

 

    1. 操作缓存

 

    片段缓存

在中文中,常用的方法是使用片段缓存来缓存视图逻辑的一部分。
这是默认可用的,无需添加任何 gem。

2. 什么是片段缓存?

以下是一种理解方式。

1. `cache` メソッドを使用。
2. 指定した引数から生成されるキーを元に、
3. ブロックに渡したビューのロジックをキャッシュする。

示例代码

<% @products.each do |product| %>
  <% cache product do %>
    <%= render product %>
  <% end %>
<% end %>

这里是Rails指南的一个例子。
我们将一个名为product的对象作为键,并缓存了一个名为product的部分视图(有点复杂)。

3. 提醒事项

当たり前ではあるが、同一リクエスト内で同じキーを2回利用すると、意図しない挙動になってしまうので、ビュー内で一意である必要がある。

比如说这样的感觉。

app/views/products/index.html.erb 可以被改写为以下中文版本:

应用/视图/产品/索引.html.erb

<%#= bad %>
<% @products.each do |product| %>
  <% cache product do %>
    <%= render product %>
  <% end %>
<% end %>
...
<% product = @products.first %>
<% cache product do %>
  <%= render item %>
<% end %>

<%#= good %>
<% @products.each do |product| %>
  <% cache product do %>
    <%= render product %>
  <% end %>
<% end %>
...
<% item = @items.first %>
<% cache item do %>
  <%= render item %>
<% end %>

可能有些例子不太好理解。。

4. 参考链接

有很多篇文章以简单易懂的方式解释了清楚。

    • Railsのキャッシュ機構 – Railsガイド

 

    • Railsでクエリ結果をキャッシュしてDB負荷を軽減する – Qiita

Railsのキャッシュ(cache)について – Qiita
Railsのフラグメントキャッシュについて調べてみた – Qiita
Rails のキャッシュについて – Qiita
Railsアプリを66%スピードアップ ― Railsキャッシュの完全ガイド – POSTD

广告
将在 10 秒后关闭
bannerAds