{"id":60971,"date":"2023-11-04T05:45:59","date_gmt":"2023-11-04T08:45:59","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=60971&#038;preview=true&#038;preview_id=60971"},"modified":"2023-11-07T05:14:34","modified_gmt":"2023-11-07T08:14:34","slug":"cache-rails","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/","title":{"rendered":"Cache do Ruby on Rails: Um Tutorial R\u00e1pido"},"content":{"rendered":"<p>O armazenamento em cache \u00e9 essencial para aprimorar o desempenho e a escalabilidade dos aplicativos da internet, e o armazenamento em cache no <a href=\"https:\/\/kinsta.com\/pt\/blog\/ruby-on-rails-vs-node-js\/#what-is-ruby-on-rails\">Ruby on Rails<\/a> n\u00e3o \u00e9 exce\u00e7\u00e3o. Ao armazenar e reutilizar os resultados de c\u00e1lculos ou consultas complexas ao bancos de dados, o armazenamento em cache reduz significativamente o tempo e os recursos necess\u00e1rios para atender \u00e0s solicita\u00e7\u00f5es dos usu\u00e1rios.<\/p>\n<p>Aqui, analisamos como implementar diferentes tipos de armazenamento em cache no Rails, como o armazenamento em cache de fragmentos e o armazenamento em cache de Russian doll. Tamb\u00e9m mostraremos como gerenciar depend\u00eancias de cache e escolher armazenamentos de cache, al\u00e9m de delinear as pr\u00e1ticas recomendadas para usar o cache de forma eficaz em um aplicativo Rails.<\/p>\n<p>Este artigo pressup\u00f5e que voc\u00ea esteja familiarizado com o Ruby on Rails, use a vers\u00e3o 6 ou superior do Rails e se sente \u00e0 vontade para usar as <a href=\"https:\/\/guides.rubyonrails.org\/action_view_overview.html\" target=\"_blank\" rel=\"noopener noreferrer\">visualiza\u00e7\u00f5es do Rails<\/a>. Os exemplos de c\u00f3digo demonstram como utilizar o cache dentro de novos ou existentes templates de visualiza\u00e7\u00e3o.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Tipos de cache do Ruby on Rails<\/h2>\n<p>V\u00e1rios tipos de armazenamento em cache est\u00e3o dispon\u00edveis nos aplicativos Ruby on Rails, dependendo do n\u00edvel e da detalhamento do conte\u00fado a ser armazenado em cache. Os principais tipos usados em aplicativos modernos do Rails s\u00e3o:<\/p>\n<ul>\n<li><strong>Cache de fragmentos<\/strong>: Armazena em cache partes de uma p\u00e1gina da internet que n\u00e3o mudam com frequ\u00eancia, como cabe\u00e7alhos, rodap\u00e9s, barras laterais ou conte\u00fado est\u00e1tico. O cache de fragmentos reduz o n\u00famero de parciais ou componentes renderizados em cada solicita\u00e7\u00e3o.<\/li>\n<li><strong>Cache de russian doll<\/strong>: Armazena em cache fragmentos aninhados de uma p\u00e1gina da internet que dependem uns dos outros, como cole\u00e7\u00f5es e associa\u00e7\u00f5es. O cache de russian doll evita consultas desnecess\u00e1rias ao banco de dados e facilita a reutiliza\u00e7\u00e3o de fragmentos inalterados armazenados em cache.<\/li>\n<\/ul>\n<p>Dois outros tipos de armazenamento em cache faziam parte do Ruby on Rails, mas agora est\u00e3o dispon\u00edveis como bibliotecas separadas:<\/p>\n<ul>\n<li><strong>Cache de p\u00e1gina<\/strong>: Armazena em cache p\u00e1ginas da internet inteiras como arquivos est\u00e1ticos no servidor, ignorando todo o ciclo de vida de renderiza\u00e7\u00e3o da p\u00e1gina<\/li>\n<li><strong>Cache de a\u00e7\u00e3o<\/strong>: Armazena em cache a sa\u00edda de a\u00e7\u00f5es inteiras do controlador. \u00c9 semelhante ao cache de p\u00e1gina, mas permite que voc\u00ea aplique filtros como autentica\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>O armazenamento em cache de p\u00e1ginas e a\u00e7\u00f5es n\u00e3o \u00e9 usado com frequ\u00eancia e n\u00e3o \u00e9 mais recomendado para a maioria dos casos de uso em aplicativos Rails modernos.<\/p>\n<h2>Cache de fragmentos no Ruby on Rails<\/h2>\n<p>O cache de fragmentos permite que voc\u00ea armazene em cache partes de uma p\u00e1gina alteradas raramente. Por exemplo, uma p\u00e1gina que exibe uma lista de produtos com seus pre\u00e7os e classifica\u00e7\u00f5es associados pode armazenar em cache detalhes que provavelmente n\u00e3o ser\u00e3o alterados.<\/p>\n<p>Enquanto isso, voc\u00ea pode permitir que o Rails renderize novamente as partes din\u00e2micas da p\u00e1gina &#8211; como coment\u00e1rios ou avalia\u00e7\u00f5es &#8211; a cada carregamento da p\u00e1gina. O cache de fragmentos \u00e9 menos \u00fatil quando os dados subjacentes de uma exibi\u00e7\u00e3o mudam com frequ\u00eancia, devido \u00e0 sobrecarga de atualiza\u00e7\u00e3o frequente do cache.<\/p>\n<p>Como o tipo mais simples de armazenamento em cache inclu\u00eddo no Rails, o armazenamento em cache de fragmentos deve ser sua primeira op\u00e7\u00e3o ao adicionar cache ao seu aplicativo para melhorar o desempenho.<\/p>\n<p>Para usar o cache de fragmentos no Rails, use o <a href=\"https:\/\/api.rubyonrails.org\/v6.1.0\/classes\/ActionView\/Helpers\/CacheHelper.html\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9todo auxiliar<\/a> <code>cache<\/code> em suas exibi\u00e7\u00f5es. Por exemplo, escreva o seguinte c\u00f3digo para armazenar em cache um produto parcial em sua exibi\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-js\">&lt;% @products.each do |product| %&gt;\n  &lt;% cache product do %&gt;\n    &lt;%= render partial: \"product\", locals: { product: product } %&gt;\n  &lt;% end %&gt;\n&lt;% end %&gt;<\/code><\/pre>\n<p>O auxiliar <code>cache<\/code> gera uma chave de cache com base no nome da classe de cada elemento, <code>id<\/code>, e no registro de data e hora <code>updated_at<\/code> (por exemplo, <code>products\/1-20230501000000<\/code>). Na pr\u00f3xima vez que um usu\u00e1rio solicitar o mesmo produto, o auxiliar <code>cache<\/code> buscar\u00e1 o fragmento armazenado em cache no armazenamento de cache e o exibir\u00e1 sem ler o produto no banco de dados.<\/p>\n<p>Voc\u00ea tamb\u00e9m pode personalizar a chave de cache passando op\u00e7\u00f5es para o auxiliar <code>cache<\/code>. Por exemplo, para incluir um n\u00famero de vers\u00e3o ou um carimbo de data\/hora em sua chave de cache, escreva algo assim:<\/p>\n<pre><code class=\"language-js\">&lt;% @products.each do |product| %&gt;\n  &lt;% cache [product, \"v1\"] do %&gt;\n    &lt;%= render partial: \"product\", locals: { product: product } %&gt;\n  &lt;% end %&gt;\n&lt;% end %&gt;<\/code><\/pre>\n<p>Como alternativa, voc\u00ea pode definir um tempo de expira\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-js\">&lt;% @products.each do |product| %&gt;\n  &lt;% cache product, expires_in: 1.hour do %&gt;\n    &lt;%= render partial: \"product\", locals: { product: product } %&gt;\n  &lt;% end %&gt;\n&lt;% end %&gt;<\/code><\/pre>\n<p>O primeiro exemplo anexar\u00e1 <code>v1<\/code> \u00e0 chave do cache (por exemplo, <code>products\/1-v1<\/code>). Isso serve para invalidar o cache quando voc\u00ea altera o modelo parcial ou o layout. O segundo exemplo define um tempo de expira\u00e7\u00e3o para a entrada do cache (1 hora), o que ajuda a expirar dados obsoletos.<\/p>\n<h2>Cache em estilo &#8220;<strong>Russian Doll<\/strong>&#8221; no Ruby on Rails<\/h2>\n<p>O cache de russian doll \u00e9 uma poderosa estrat\u00e9gia de cache no Ruby on Rails que otimiza o desempenho do seu aplicativo aninhando caches uns dentro dos outros. Ele usa o cache de fragmentos do Rails e as depend\u00eancias de cache para minimizar o trabalho redundante e melhorar os tempos de carregamento.<\/p>\n<p>Em um aplicativo t\u00edpico do Rails, voc\u00ea geralmente renderiza uma cole\u00e7\u00e3o de itens, cada um com v\u00e1rios componentes secund\u00e1rios. Ao atualizar um \u00fanico item, evite renderizar novamente a cole\u00e7\u00e3o inteira ou qualquer item n\u00e3o afetado. Use o cache &#8220;Russian Doll&#8221; ao lidar com estruturas de dados hier\u00e1rquicas ou aninhadas, especialmente quando os componentes aninhados t\u00eam seus pr\u00f3prios dados associados que podem ser alterados independentemente.<\/p>\n<p>A desvantagem do cache &#8220;Russian Doll&#8221; \u00e9 que ele aumenta a complexidade. Voc\u00ea deve entender as rela\u00e7\u00f5es entre os n\u00edveis aninhados de itens que est\u00e3o sendo armazenados em cache para garantir que os itens certos sejam armazenados em cache. Em alguns casos, voc\u00ea precisar\u00e1 adicionar associa\u00e7\u00f5es aos seus templates <a href=\"https:\/\/guides.rubyonrails.org\/active_record_basics.html\" target=\"_blank\" rel=\"noopener noreferrer\">Active Record<\/a> para que o Rails possa inferir os relacionamentos entre os itens de dados armazenados em cache.<\/p>\n<p>Assim como o cache de fragmento regular, o cache de russian doll usa o m\u00e9todo auxiliar <code>cache<\/code>. Por exemplo, para armazenar em cache uma categoria com suas subcategorias e produtos em sua exibi\u00e7\u00e3o, escreva algo assim:<\/p>\n<pre><code class=\"language-js\">&lt;% @categories.each do |category| %&gt;\n  &lt;% cache category do %&gt;\n    &lt;h2&gt;&lt;%= category.name %&gt;&lt;\/h2&gt;\n    &lt;% category.subcategories.each do |subcategory| %&gt;\n    &lt;% cache subcategory do %&gt;\n    &lt;h3&gt;&lt;%= subcategory.name %&gt;&lt;\/h3&gt;\n    &lt;% subcategory.products.each do |product| %&gt;\n    &lt;% cache product do %&gt;\n        &lt;%= render partial: \"product\", locals: { product: product } %&gt;\n        &lt;% end %&gt;\n    &lt;% end %&gt;\n    &lt;% end %&gt;\n    &lt;% end %&gt;\n  &lt;% end %&gt;\n&lt;% end %&gt;<\/code><\/pre>\n<p>O auxiliar <code>cache<\/code> armazenar\u00e1 cada n\u00edvel aninhado separadamente no armazenamento de cache. Na pr\u00f3xima vez que a mesma categoria for solicitada, ele buscar\u00e1 o fragmento armazenado em cache no armazenamento de cache e o exibir\u00e1 sem renderiz\u00e1-lo novamente.<\/p>\n<p>No entanto, se os detalhes de qualquer subcategoria ou produto forem alterados, como o nome ou a descri\u00e7\u00e3o, isso invalidar\u00e1 o fragmento armazenado em cache, que ser\u00e1 renderizado novamente com os dados atualizados. O cache em estilo &#8220;<strong>russian doll<\/strong>&#8221; assegura que voc\u00ea n\u00e3o precise invalidar uma categoria inteira caso apenas uma subcategoria ou produto seja alterado.<\/p>\n<h2>Gerenciamento de depend\u00eancia de cache em Ruby on Rails<\/h2>\n<p>As depend\u00eancias de cache s\u00e3o rela\u00e7\u00f5es entre os dados em cache e suas fontes subjacentes, e gerenci\u00e1-las pode ser complicado. Caso os dados de origem sejam alterados, todos os dados em cache associados dever\u00e3o expirar.<\/p>\n<p>O Rails pode usar carimbos de data\/hora para gerenciar automaticamente a maioria das depend\u00eancias de cache. Todo modelo Active Record tem atributos <code>created_at<\/code> e <code>updated_at<\/code> que indicam quando o cache criou ou atualizou o registro pela \u00faltima vez. Para garantir que o Rails possa gerenciar automaticamente o cache, defina os relacionamentos dos seus modelos Active Record da seguinte forma:<\/p>\n<pre><code class=\"language-js\">class Product &lt; ApplicationRecord\n  belongs_to :category\nend\nclass Category &lt; ApplicationRecord\n  has_many :products\nend<\/code><\/pre>\n<p>Neste exemplo:<\/p>\n<ul>\n<li>Se voc\u00ea atualizar um registro de produto (por exemplo, alterando seu pre\u00e7o), o carimbo de data\/hora <code>updated_at<\/code> ser\u00e1 alterado automaticamente.<\/li>\n<li>Se voc\u00ea usar esse carimbo de data\/hora como parte da chave de cache (como <code> products\/1-20230504000000<\/code>), ele tamb\u00e9m invalidar\u00e1 automaticamente o fragmento em cache.<\/li>\n<li>Para invalidar o fragmento em cache da sua categoria quando voc\u00ea atualizar um registro de produto &#8211; talvez porque ele mostre alguns dados agregados como o pre\u00e7o m\u00e9dio &#8211; use o m\u00e9todo <code>touch<\/code> no seu controlador (<code>@product.category.touch<\/code>) ou adicione uma op\u00e7\u00e3o <code>touch<\/code> nos seus membros de modelo (<code>belongs_to :category touch: true<\/code>).<\/li>\n<\/ul>\n<p>Outro mecanismo para gerenciar depend\u00eancias de cache \u00e9 usar m\u00e9todos de cache de baixo n\u00edvel, como <code>fetch<\/code> e <code>write<\/code>, diretamente em seus templates ou controladores. Esses m\u00e9todos permitem que voc\u00ea armazene dados ou conte\u00fado arbitr\u00e1rio no armazenamento de cache com chaves e op\u00e7\u00f5es personalizadas. Por exemplo:<\/p>\n<pre><code class=\"language-js\">class Product &lt; ApplicationRecord\n  def self.average_price\n    Rails.cache.fetch(\"products\/average_price\", expires_in: 1.hour) do\n    average(:price)\n    end\n  end\nend<\/code><\/pre>\n<p>Este exemplo demonstra como armazenar em cache dados calculados &#8211; como o pre\u00e7o m\u00e9dio de todos os produtos &#8211; por uma hora usando o m\u00e9todo <code>fetch<\/code> com uma chave personalizada (<code>products\/average_price<\/code>) e uma op\u00e7\u00e3o de expira\u00e7\u00e3o (<code>expires_in: 1.hour<\/code>).<\/p>\n<p>O m\u00e9todo <code>fetch<\/code> tentar\u00e1 primeiro ler os dados do armazenamento de cache. Caso n\u00e3o consiga encontrar os dados ou se os dados tiverem expirado, ele executar\u00e1 o bloco e armazenar\u00e1 o resultado no armazenamento de cache.<\/p>\n<p>Para invalidar manualmente uma entrada de cache antes do seu tempo de expira\u00e7\u00e3o, use o m\u00e9todo <code>write<\/code> com a op\u00e7\u00e3o <code>force<\/code>:<\/p>\n<pre><code class=\"language-js\">Rails.cache.write(\"products\/average_price\", Product.average(:price), force: true))<\/code><\/pre>\n<h2>Armazenamento e backends de cache no Ruby on Rails<\/h2>\n<p>No Rails, voc\u00ea tem a op\u00e7\u00e3o de escolher entre diversos armazenamentos ou backends de cache para guardar seus dados e conte\u00fados em cache. A loja de cache do Rails atua como uma camada de abstra\u00e7\u00e3o, fornecendo uma interface comum para interagir com diferentes sistemas de armazenamento. Um backend de cache implementa a interface da loja de cache para um sistema de armazenamento espec\u00edfico.<\/p>\n<p>Aqui est\u00e3o algumas op\u00e7\u00f5es:<\/p>\n<h3>Armazenamento de mem\u00f3ria<\/h3>\n<p>O armazenamento de mem\u00f3ria usa um hash na mem\u00f3ria como armazenamento em cache. Ele \u00e9 r\u00e1pido e simples, mas tem capacidade e persist\u00eancia limitadas. Esse armazenamento de cache \u00e9 adequado para ambientes de desenvolvimento e teste ou aplicativos pequenos e simples.<\/p>\n<h3>Armazenamento em disco<\/h3>\n<p>Esse armazenamento utiliza arquivos no disco como local de armazenamento. Embora seja a op\u00e7\u00e3o de cache mais lenta no Rails, possui uma capacidade ampla e \u00e9 persistente. Essa abordagem \u00e9 indicada para aplicativos que precisam armazenar\u00a0dados em excesso e n\u00e3o exigem desempenho m\u00e1ximo.<\/p>\n<h3>Redis<\/h3>\n<p>O armazenamento Redis usa uma inst\u00e2ncia do <a href=\"https:\/\/kinsta.com\/pt\/blog\/redis-vs-mongodb\/#redis-with-kinsta\">Redis<\/a> para armazenamento em cache. O Redis \u00e9 um armazenamento de dados na mem\u00f3ria que oferece suporte a v\u00e1rios tipos de dados. Embora seja r\u00e1pido e flex\u00edvel, requer um servidor separado e configura\u00e7\u00e3o espec\u00edfica. Essa op\u00e7\u00e3o \u00e9 indicada para aplicativos que precisam armazenar em cache dados complexos ou din\u00e2micos que sofrem altera\u00e7\u00f5es frequentes. O Redis \u00e9 uma escolha ideal ao executar aplicativos Rails na nuvem, pois alguns provedores de hospedagem, como a Kinsta, oferecem o <a href=\"https:\/\/kinsta.com\/pt\/docs\/hospedagem-de-wordpress\/cache\/cache-redis\/\">Redis como um cache de objeto persistente<\/a>.<\/p>\n<h3>Memcached<\/h3>\n<p>O armazenamento do Memcached usa uma inst\u00e2ncia <a href=\"https:\/\/kinsta.com\/pt\/blog\/memcached-vs-redis\/\">Memcached<\/a> para armazenamento em cache.\u00a0O Memcached \u00e9 um armazenamento em mem\u00f3ria do tipo chave-valor que suporta tipos de dados simples e oferece v\u00e1rias funcionalidades. \u00c9 r\u00e1pido e possui boa escalabilidade, mas, assim como o Redis, requer um servidor separado e configura\u00e7\u00e3o. Essa op\u00e7\u00e3o \u00e9 adequada para aplicativos que necessitam armazenar em cache, dados simples ou est\u00e1ticos que sofrem atualiza\u00e7\u00f5es frequentes.<\/p>\n<p>Voc\u00ea pode configurar o armazenamento de cache nos arquivos de ambiente do Rails (por exemplo, <strong>config\/environments\/development.rb<\/strong>) usando a op\u00e7\u00e3o <code>config.cache_store<\/code>. A seguir, aprenda como usar cada um dos m\u00e9todos de cache incorporados do Rails:<\/p>\n<pre><code class=\"language-js\"># Use memory store\nconfig.cache_store = :memory_store\n# Use disk store\nconfig.cache_store = :file_store, \"tmp\/cache\"\n# Use Redis\nconfig.cache_store = :redis_cache_store, { url: \"redis:\/\/localhost:6379\/0\" }\n# Use Memcached\nconfig.cache_store = :mem_cache_store, \"localhost\"<\/code><\/pre>\n<p>\u00c9 recomendado ter apenas uma chamada <code>config.cache_store<\/code> por arquivo de ambiente. Caso exista mais de uma, o armazenamento em cache usar\u00e1 apenas a \u00faltima.<\/p>\n<p>Cada tipo de armazenamento em cache apresenta vantagens e desvantagens espec\u00edficas, que variam de acordo com as necessidades e prefer\u00eancias do seu aplicativo. Escolha aquele que melhor se adapte ao seu caso de uso e ao seu n\u00edvel de experi\u00eancia.<\/p>\n<h2>Melhores pr\u00e1ticas para o armazenamento em cache do Ruby on Rails<\/h2>\n<p>Usar o armazenamento em cache no seu aplicativo Rails pode aumentar significativamente o desempenho e a escalabilidade, especialmente quando voc\u00ea implementa as melhores pr\u00e1ticas a seguir:<\/p>\n<ul>\n<li><strong>Armazenamento seletivo<\/strong>: Armazena em cache somente os dados acessados com frequ\u00eancia, que geram custos ou atualizados raramente. Evite o excesso de armazenamento em cache para evitar o uso excessivo de mem\u00f3ria, riscos de dados obsoletos e degrada\u00e7\u00e3o do desempenho.<\/li>\n<li><strong>Expira\u00e7\u00e3o de entradas de cache<\/strong>: Evite dados obsoletos ao expirar entradas inv\u00e1lidas ou irrelevantes. Use carimbos de data e hora, op\u00e7\u00f5es de expira\u00e7\u00e3o ou invalida\u00e7\u00e3o manual.<\/li>\n<li><strong>Otimize o desempenho<\/strong> <strong>do cache<\/strong>: Escolha o armazenamento de cache que atenda \u00e0s necessidades do seu aplicativo e ajuste seus par\u00e2metros, como tamanho, compress\u00e3o ou serializa\u00e7\u00e3o, para obter o desempenho ideal.<\/li>\n<li><strong>Monitore e teste o impacto do cache<\/strong>: Observe o comportamento do cache, como taxa de acerto, taxa de erro e lat\u00eancia, e avalie seus respectivos impactos no desempenho (tempo de resposta, taxa de transfer\u00eancia, uso de recursos). Use ferramentas como <a href=\"https:\/\/kinsta.com\/pt\/docs\/hospedagem-de-wordpress\/monitoramento-wordpress\/rastreamento-personalizado-new-relic\/\">New Relic<\/a>, <a href=\"https:\/\/guides.rubyonrails.org\/debugging_rails_applications.html#the-logger\" target=\"_blank\" rel=\"noopener noreferrer\">registros do Rails<\/a>, <a href=\"https:\/\/api.rubyonrails.org\/classes\/ActiveSupport\/Notifications.html\" target=\"_blank\" rel=\"noopener noreferrer\">notifica\u00e7\u00f5es do ActiveSupport<\/a> ou o <a href=\"https:\/\/github.com\/MiniProfiler\/rack-mini-profiler\" target=\"_blank\" rel=\"noopener noreferrer\">mini profiler do Rack<\/a>.<\/li>\n<\/ul>\n<h2>Resumo<\/h2>\n<p>O armazenamento em cache do Ruby on Rails melhora o desempenho e a escalabilidade do aplicativo, armazenando e reutilizando com efici\u00eancia dados ou conte\u00fado acessados com frequ\u00eancia. Com uma compreens\u00e3o mais detalhada das t\u00e9cnicas de cache, voc\u00ea estar\u00e1 preparado para fornecer aplicativos Rails mais r\u00e1pidos aos seus usu\u00e1rios.<\/p>\n<p>Ao implementar seu aplicativo Rails otimizado, voc\u00ea pode recorrer \u00e0 plataforma de <a href=\"https:\/\/sevalla.com\/application-hosting\/\">hospedagem de aplicativos<\/a> da Kinsta. Comece gratuitamente com uma conta <a href=\"https:\/\/sevalla.com\/pricing\/\">Hobby Tier<\/a> e explore a plataforma com este <a href=\"https:\/\/docs.sevalla.com\/templates\/overview#ruby-on-rails\">exemplo de in\u00edcio r\u00e1pido do Ruby on Rails<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O armazenamento em cache \u00e9 essencial para aprimorar o desempenho e a escalabilidade dos aplicativos da internet, e o armazenamento em cache no Ruby on Rails &#8230;<\/p>\n","protected":false},"author":259,"featured_media":60972,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1017],"class_list":["post-60971","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-linguagens-desenvolvimento-web"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cache do Ruby on Rails: Um Tutorial R\u00e1pido - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Aprenda como o armazenamento em cache do Ruby on Rails impulsiona o desempenho e a escalabilidade do aplicativo, armazenando de forma eficiente e reutilizando dados frequentemente acessados.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cache do Ruby on Rails: Um Tutorial R\u00e1pido\" \/>\n<meta property=\"og:description\" content=\"Aprenda como o armazenamento em cache do Ruby on Rails impulsiona o desempenho e a escalabilidade do aplicativo, armazenando de forma eficiente e reutilizando dados frequentemente acessados.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-04T08:45:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-07T08:14:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"3043\" \/>\n\t<meta property=\"og:image:height\" content=\"1522\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Steve Bonisteel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Aprenda como o armazenamento em cache do Ruby on Rails impulsiona o desempenho e a escalabilidade do aplicativo, armazenando de forma eficiente e reutilizando dados frequentemente acessados.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Bonisteel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"Cache do Ruby on Rails: Um Tutorial R\u00e1pido\",\"datePublished\":\"2023-11-04T08:45:59+00:00\",\"dateModified\":\"2023-11-07T08:14:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/\"},\"wordCount\":2231,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/\",\"name\":\"Cache do Ruby on Rails: Um Tutorial R\u00e1pido - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg\",\"datePublished\":\"2023-11-04T08:45:59+00:00\",\"dateModified\":\"2023-11-07T08:14:34+00:00\",\"description\":\"Aprenda como o armazenamento em cache do Ruby on Rails impulsiona o desempenho e a escalabilidade do aplicativo, armazenando de forma eficiente e reutilizando dados frequentemente acessados.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg\",\"width\":3043,\"height\":1522},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Linguagens de Desenvolvimento Web\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/linguagens-desenvolvimento-web\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cache do Ruby on Rails: Um Tutorial R\u00e1pido\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\",\"name\":\"Steve Bonisteel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g\",\"caption\":\"Steve Bonisteel\"},\"description\":\"Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/stevebonisteel\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Cache do Ruby on Rails: Um Tutorial R\u00e1pido - Kinsta\u00ae","description":"Aprenda como o armazenamento em cache do Ruby on Rails impulsiona o desempenho e a escalabilidade do aplicativo, armazenando de forma eficiente e reutilizando dados frequentemente acessados.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/","og_locale":"pt_PT","og_type":"article","og_title":"Cache do Ruby on Rails: Um Tutorial R\u00e1pido","og_description":"Aprenda como o armazenamento em cache do Ruby on Rails impulsiona o desempenho e a escalabilidade do aplicativo, armazenando de forma eficiente e reutilizando dados frequentemente acessados.","og_url":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-11-04T08:45:59+00:00","article_modified_time":"2023-11-07T08:14:34+00:00","og_image":[{"width":3043,"height":1522,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg","type":"image\/jpeg"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"Aprenda como o armazenamento em cache do Ruby on Rails impulsiona o desempenho e a escalabilidade do aplicativo, armazenando de forma eficiente e reutilizando dados frequentemente acessados.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Steve Bonisteel","Tempo estimado de leitura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"Cache do Ruby on Rails: Um Tutorial R\u00e1pido","datePublished":"2023-11-04T08:45:59+00:00","dateModified":"2023-11-07T08:14:34+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/"},"wordCount":2231,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/","url":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/","name":"Cache do Ruby on Rails: Um Tutorial R\u00e1pido - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg","datePublished":"2023-11-04T08:45:59+00:00","dateModified":"2023-11-07T08:14:34+00:00","description":"Aprenda como o armazenamento em cache do Ruby on Rails impulsiona o desempenho e a escalabilidade do aplicativo, armazenando de forma eficiente e reutilizando dados frequentemente acessados.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/cache-rails\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/07\/rails-caching.jpg","width":3043,"height":1522},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/cache-rails\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Linguagens de Desenvolvimento Web","item":"https:\/\/kinsta.com\/pt\/topicos\/linguagens-desenvolvimento-web\/"},{"@type":"ListItem","position":3,"name":"Cache do Ruby on Rails: Um Tutorial R\u00e1pido"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f","name":"Steve Bonisteel","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g","caption":"Steve Bonisteel"},"description":"Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.","url":"https:\/\/kinsta.com\/pt\/blog\/author\/stevebonisteel\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/60971","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/259"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=60971"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/60971\/revisions"}],"predecessor-version":[{"id":64628,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/60971\/revisions\/64628"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60971\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60971\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60971\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60971\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60971\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60971\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60971\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60971\/translations\/es"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60971\/translations\/dk"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60971\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/60972"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=60971"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=60971"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=60971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}