{"id":71103,"date":"2023-07-10T09:46:34","date_gmt":"2023-07-10T08:46:34","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=71103&#038;preview=true&#038;preview_id=71103"},"modified":"2023-07-11T08:45:16","modified_gmt":"2023-07-11T07:45:16","slug":"rails-caching","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/","title":{"rendered":"Caching di Ruby on Rails: un Tutorial Veloce"},"content":{"rendered":"<p>Il caching \u00e8 essenziale per migliorare le prestazioni e la scalabilit\u00e0 delle applicazioni web e il caching in <a href=\"https:\/\/kinsta.com\/it\/blog\/ruby-on-rails-vs-node-js\/#what-is-ruby-on-rails\">Ruby on Rails<\/a> non fa eccezione. Memorizzando e riutilizzando i risultati di calcoli o di query onerosi per il database, il caching riduce significativamente il tempo e le risorse necessarie per servire le richieste degli utenti.<\/p>\n<p>Qui esaminiamo come implementare diversi tipi di caching in Rails, come il fragment caching, ovvero caching dei frammenti, e il Russian doll caching, o caching matrioska. Vi mostreremo anche come gestire le dipendenze della cache e come scegliere gli archivi della cache, e vi illustreremo le best practice per utilizzare la cache in modo efficace in un&#8217;applicazione Rails.<\/p>\n<p>Questo articolo presuppone che abbiate familiarit\u00e0 con Ruby on Rails, che utilizziate Rails versione 6 o superiore e che vi sentiate a vostro agio nell&#8217;utilizzo delle <a href=\"https:\/\/guides.rubyonrails.org\/action_view_overview.html\" target=\"_blank\" rel=\"noopener noreferrer\">viste di Rails<\/a>. Gli esempi di codice dimostrano come utilizzare il caching all&#8217;interno di modelli di vista nuovi o gi\u00e0 esistenti.<\/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>Tipi di caching in Ruby on Rails<\/h2>\n<p>Nelle applicazioni Ruby on Rails sono disponibili diversi tipi di caching, a seconda del livello e della granularit\u00e0 dei contenuti da memorizzare nella cache. I principali tipi utilizzati nelle moderne applicazioni Rails sono:<\/p>\n<ul>\n<li><strong>Caching dei frammenti<\/strong>: memorizza nella cache le parti di una pagina web che non cambiano frequentemente, come le intestazioni, i pi\u00e8 di pagina, le barre laterali o i contenuti statici. Il caching dei frammenti riduce il numero di parti o componenti renderizzati ad ogni richiesta.<\/li>\n<li><strong>Caching matrioska<\/strong>: memorizza nella cache i frammenti annidati di una pagina web che dipendono l&#8217;uno dall&#8217;altro, come le raccolte e le associazioni. Il caching matrioska evita le query inutili al database e facilita il riutilizzo dei frammenti invariati nella cache.<\/li>\n<\/ul>\n<p>Facevano parte di Ruby on Rails anche altri due tipi di caching, ma adesso sono disponibili solo come gemme separate:<\/p>\n<ul>\n<li><strong>Caching delle pagine<\/strong>: memorizza nella cache intere pagine web come file statici sul server, bypassando l&#8217;intero ciclo di vita del rendering della pagina<\/li>\n<li><strong>Caching delle azioni<\/strong>: memorizza nella cache l&#8217;output di intere azioni del controller. \u00c8 simile al caching delle pagine ma permette di applicare filtri come l&#8217;autenticazione.<\/li>\n<\/ul>\n<p>Il caching delle pagine e delle azioni sono poco utilizzati e non sono pi\u00f9 consigliati per la maggior parte dei casi d&#8217;uso nelle moderne applicazioni Rails.<\/p>\n<h2>Cache dei frammenti in Ruby on Rails<\/h2>\n<p>La cache dei frammenti permette di memorizzare nella cache parti di una pagina che cambiano di rado. Ad esempio, una pagina che mostra un elenco di prodotti con i relativi prezzi e valutazioni pu\u00f2 memorizzare nella cache i dettagli che difficilmente cambieranno.<\/p>\n<p>Nel frattempo, potrebbe permettere a Rails di renderizzare nuovamente le parti dinamiche della pagina, come i commenti o le recensioni, a ogni caricamento della pagina. La cache dei frammenti \u00e8 meno utile quando i dati sottostanti a una vista cambiano frequentemente, a causa dell&#8217;overhead che comporta l&#8217;aggiornamento frequente della cache.<\/p>\n<p>Essendo il tipo pi\u00f9 semplice di cache incluso in Rails, il fragment caching dovrebbe essere la prima scelta quando si vuole aggiungere la cache alla propria applicazione per migliorarne le prestazioni.<\/p>\n<p>Per utilizzare la cache dei frammenti in Rails, usate il <a href=\"https:\/\/api.rubyonrails.org\/v6.1.0\/classes\/ActionView\/Helpers\/CacheHelper.html\" target=\"_blank\" rel=\"noopener noreferrer\">metodo helper<\/a> <code>cache<\/code> nelle viste. Ad esempio, scrivete il seguente codice per mettere in cache un prodotto parziale nella vostra vista:<\/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>L&#8217;helper <code>cache<\/code> genera una chiave di cache basata sul nome della classe di ogni elemento, <code>id<\/code>, e sul timestamp <code>updated_at<\/code> (ad esempio, <code>products\/1-20230501000000<\/code>). La volta successiva che un utente richiede lo stesso prodotto, l&#8217;helper <code>cache<\/code> recupera il frammento in cache dall&#8217;archivio della cache e lo visualizza senza leggere il prodotto dal database.<\/p>\n<p>Potete anche personalizzare la chiave della cache passando delle opzioni all&#8217;helper <code>cache<\/code>. Ad esempio, per includere un numero di versione o un timestamp nella chiave della cache, scrivete qualcosa di simile:<\/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>In alternativa, potete impostare un tempo di scadenza:<\/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>Il primo esempio aggiunge <code>v1<\/code> alla chiave della cache (ad esempio, <code>products\/1-v1<\/code>). Questo \u00e8 utile per invalidare la cache quando cambiate il modello parziale o il layout. Il secondo esempio imposta un tempo di scadenza per la voce della cache (1 ora), che aiuta a far scadere i dati obsoleti.<\/p>\n<h2>Caching matrioska in Ruby on Rails<\/h2>\n<p>Il caching matrioska \u00e8 una potente strategia di caching in Ruby on Rails che ottimizza le prestazioni dell&#8217;applicazione annidando le cache una dentro l&#8217;altra. Utilizza la cache dei frammenti di Rails e le dipendenze della cache per ridurre al minimo il lavoro ridondante e migliorare i tempi di caricamento.<\/p>\n<p>In una tipica applicazione Rails, spesso si esegue il rendering di una raccolta di elementi, ciascuno con pi\u00f9 componenti figli. Quando aggiornate un singolo elemento, evita di renderizzare l&#8217;intera collezione o gli elementi non interessati. Usate il Russian Doll caching quando avete a che fare con strutture di dati gerarchiche o annidate, soprattutto quando i componenti annidati hanno i loro dati associati che potrebbero cambiare in modo indipendente.<\/p>\n<p>L&#8217;aspetto negativo del caching matrioska \u00e8 che aggiunge complessit\u00e0. Sar\u00e0 necessario capire le relazioni tra i livelli annidati degli elementi che state mettendo in cache per assicurarvi di mettere in cache gli elementi giusti. In alcuni casi, dovrete aggiungere delle associazioni ai vostri modelli <a href=\"https:\/\/guides.rubyonrails.org\/active_record_basics.html\" target=\"_blank\" rel=\"noopener noreferrer\">Active Record<\/a> in modo che Rails possa dedurre le relazioni tra i dati memorizzati nella cache.<\/p>\n<p>Come per la normale cache dei frammenti, la cache matrioska utilizza il metodo helper <code>cache<\/code>. Ad esempio, per mettere in cache una categoria con le sue sottocategorie e i suoi prodotti nella vostra vista, scrivete qualcosa di simile:<\/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>L&#8217;helper <code>cache<\/code> memorizzer\u00e0 ogni livello annidato separatamente nell&#8217;archivio della cache. La volta successiva che verr\u00e0 richiesta la stessa categoria, verr\u00e0 recuperato il suo frammento in cache dall&#8217;archivio della cache e verr\u00e0 visualizzato senza doverlo renderizzare nuovamente.<\/p>\n<p>Tuttavia, se i dettagli di una sottocategoria o di un prodotto cambiano (ad esempio il nome o la descrizione), il frammento memorizzato nella cache viene invalidato e quindi riproposto con i dati aggiornati. La cache a matrioska vi permette di non dover invalidare un&#8217;intera categoria se una singola sottocategoria o un prodotto cambia.<\/p>\n<h2>Gestione delle dipendenze della cache in Ruby on Rails<\/h2>\n<p>Le dipendenze della cache sono relazioni tra i dati memorizzati nella cache e le loro fonti sottostanti e la loro gestione pu\u00f2 essere complicata. Se i dati sorgente cambiano, i dati in cache associati devono scadere.<\/p>\n<p>Rails pu\u00f2 utilizzare i timestamp per gestire automaticamente la maggior parte delle dipendenze della cache. Ogni modello Active Record ha gli attributi <code>created_at<\/code> e <code>updated_at<\/code> che indicano quando la cache ha creato o aggiornato l&#8217;ultimo record. Per fare in modo che Rails possa gestire automaticamente la cache, definite le relazioni dei vostri modelli Active Record come segue:<\/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>In questo esempio:<\/p>\n<ul>\n<li>Se aggiornate un record di prodotto (ad esempio, cambiando il suo prezzo), il vostro timestamp <code>updated_at<\/code> cambia automaticamente.<\/li>\n<li>Se utilizzate questo timestamp come parte della vostra chiave di cache (come <code> products\/1-20230504000000<\/code>), invalida automaticamente anche il frammento in cache.<\/li>\n<li>Per invalidare il frammento memorizzato nella cache della vostra categoria quando aggiornate un record di prodotto, magari perch\u00e9 mostra alcuni dati aggregati come il prezzo medio, usate il metodo <code>touch<\/code> nel vostro controllore (<code>@product.category.touch<\/code>) o aggiungete un&#8217;opzione <code>touch<\/code> nel vostro modello di associazione (<code>belongs_to :category touch: true<\/code>).<\/li>\n<\/ul>\n<p>Un altro meccanismo per gestire le dipendenze dalla cache \u00e8 l&#8217;utilizzo di metodi di caching di basso livello, come <code>fetch<\/code> e <code>write<\/code>, direttamente nei modelli o nei controllori. Questi metodi permettono di memorizzare dati o contenuti arbitrari nella cache con chiavi e opzioni personalizzate. Ad esempio:<\/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>Questo esempio mostra come memorizzare nella cache dati calcolati &#8211; come il prezzo medio di tutti i prodotti &#8211; per un&#8217;ora utilizzando il metodo <code>fetch<\/code> con una chiave personalizzata (<code>products\/average_price<\/code>) e un&#8217;opzione di scadenza (<code>expires_in: 1.hour<\/code>).<\/p>\n<p>Il metodo <code>fetch<\/code> cercher\u00e0 prima di tutto di leggere i dati dall&#8217;archivio della cache. Se non riesce a trovare i dati o se questi sono scaduti, esegue il blocco e memorizza il risultato nella cache.<\/p>\n<p>Per invalidare manualmente una voce della cache prima della sua scadenza, usate il metodo <code>write<\/code> con l&#8217;opzione <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>Cache store e backend in Ruby on Rails<\/h2>\n<p>Rails permette di scegliere diversi cache store o backend per memorizzare dati e contenuti nella cache. Il cache store di Rails \u00e8 un livello di astrazione che fornisce un&#8217;interfaccia comune per interagire con diversi sistemi di archiviazione. Un backend della cache implementa l&#8217;interfaccia del cache store per uno specifico sistema di archiviazione.<\/p>\n<p>Rails supporta diversi tipi di cache store o backend, illustrati di seguito.<\/p>\n<h3>Memory store<\/h3>\n<p>Il memory store utilizza un hash in-memory come memoria cache. \u00c8 veloce e semplice, ma ha una capacit\u00e0 e una persistenza limitate. Questo archivio di cache \u00e8 adatto ad ambienti di sviluppo e di test o ad applicazioni piccole e semplici.<\/p>\n<h3>Disk store<\/h3>\n<p>Il Disk Store utilizza i file sul disco come memoria cache. \u00c8 l&#8217;opzione di cache pi\u00f9 lenta di Rails ma ha una grande capacit\u00e0 e persistenza. Il Disk Store \u00e8 adatto alle applicazioni che devono memorizzare nella cache grandi quantit\u00e0 di dati e non hanno bisogno di prestazioni massime.<\/p>\n<h3>Redis<\/h3>\n<p>Lo store Redis utilizza un&#8217;istanza <a href=\"https:\/\/kinsta.com\/it\/blog\/redis-vs-mongodb\/#redis-with-kinsta\">Redis<\/a> per la memorizzazione della cache. Redis \u00e8 un archivio di dati in-memory che supporta diversi tipi di dati. Sebbene sia veloce e flessibile, richiede un server e una configurazione separati. \u00c8 adatto alle applicazioni che devono memorizzare nella cache dati complessi o dinamici che cambiano frequentemente. Redis \u00e8 la scelta ideale quando si eseguono applicazioni Rails nel cloud perch\u00e9 alcuni provider di hosting, tra cui Kinsta, offrono <a href=\"https:\/\/kinsta.com\/it\/docs\/hosting-wordpress\/cache\/cache-redis\/\">Redis come cache persistente di oggetti<\/a>.<\/p>\n<h3>Memcached<\/h3>\n<p>Lo store Memcached utilizza un&#8217;istanza <a href=\"https:\/\/kinsta.com\/it\/blog\/memcached-vs-redis\/\">Memcached<\/a> per la memorizzazione della cache. Memcached \u00e8 un archivio di valori-chiave in memoria che supporta tipi di dati e funzioni semplici. \u00c8 veloce e scalabile ma, come Redis, richiede un server e una configurazione separati. Questo archivio \u00e8 adatto alle applicazioni che hanno bisogno di memorizzare nella cache dati semplici o statici che subiscono aggiornamenti frequenti.<\/p>\n<p>Potete configurare il vostro archivio di cache nei file degli ambienti di Rails (ad esempio, <strong>config\/environments\/development.rb<\/strong>) utilizzando l&#8217;opzione <code>config.cache_store<\/code>. Ecco come utilizzare ciascuno dei metodi di cache integrati in 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>Dovreste eseguire una sola chiamata a <code>config.cache_store<\/code> per ogni file di ambiente. Se ne avete pi\u00f9 di una, il cache store utilizza solo l&#8217;ultima.<\/p>\n<p>Ogni archivio di cache presenta vantaggi e svantaggi unici a seconda delle esigenze e delle preferenze dell&#8217;applicazione. Scegliete quello pi\u00f9 adatto al vostro caso d&#8217;uso e al vostro livello di esperienza.<\/p>\n<h2>Le best practice per il caching di Ruby on Rails<\/h2>\n<p>L&#8217;uso della cache nella vostra applicazione Rails pu\u00f2 aumentare in modo significativo le sue prestazioni e la sua scalabilit\u00e0, soprattutto se si implementano le seguenti best practice:<\/p>\n<ul>\n<li>Mettere in <strong>cache in modo selettivo<\/strong>: Mettete in cache solo i dati con accesso frequente, costosi da generare o aggiornati di rado. Evitate l&#8217;uso eccessivo della cache per evitare l&#8217;utilizzo eccessivo della memoria, il rischio di dati stantii e il degrado delle prestazioni.<\/li>\n<li><strong>Far scadere le voci della cache<\/strong>: Evitate i dati obsoleti facendo scadere le voci non valide o irrilevanti. Usate i timestamp, le opzioni di scadenza o l&#8217;invalidazione manuale.<\/li>\n<li><strong>Ottimizzare le prestazioni della cache<\/strong>: Scegliete l&#8217;archivio della cache che si adatta alle esigenze della vostra applicazione e mettete a punto i suoi parametri, come le dimensioni, la compressione o la serializzazione, per ottenere prestazioni ottimali.<\/li>\n<li><strong>Monitorare e testare l&#8217;impatto della cache<\/strong>: Valutate il comportamento della cache &#8211; come la percentuale di hit, miss e latenza &#8211; e valutate il rispettivo impatto sulle prestazioni (tempi di risposta, throughput, utilizzo delle risorse). Utilizzate strumenti come <a href=\"https:\/\/kinsta.com\/it\/docs\/hosting-wordpress\/wordpress-monitoraggio\/monitoraggio-new-relic-personalizzato\/\">New Relic<\/a>, i <a href=\"https:\/\/guides.rubyonrails.org\/debugging_rails_applications.html#the-logger\" target=\"_blank\" rel=\"noopener noreferrer\">log di Rails<\/a>, le <a href=\"https:\/\/api.rubyonrails.org\/classes\/ActiveSupport\/Notifications.html\" target=\"_blank\" rel=\"noopener noreferrer\">notifiche di ActiveSupport<\/a> o il <a href=\"https:\/\/github.com\/MiniProfiler\/rack-mini-profiler\" target=\"_blank\" rel=\"noopener noreferrer\">mini profiler di Rack<\/a>.<\/li>\n<\/ul>\n<h2>Riepilogo<\/h2>\n<p>Il caching di Ruby on Rails migliora le prestazioni e la scalabilit\u00e0 delle applicazioni memorizzando e riutilizzando in modo efficiente i dati o i contenuti a cui si accede di frequente. Con una conoscenza pi\u00f9 approfondita delle tecniche di caching, sarete meglio equipaggiati per offrire applicazioni Rails pi\u00f9 veloci ai vostri utenti.<\/p>\n<p>Per distribuire la vostra applicazione Rails ottimizzata, potete rivolgerti alla piattaforma di <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hosting di Applicazioni<\/a> di Kinsta. Iniziate gratuitamente con un account <a href=\"https:\/\/sevalla.com\/pricing\/\">Piano Hobby<\/a> ed esplorate la piattaforma con questo <a href=\"https:\/\/docs.sevalla.com\/templates\/overview#ruby-on-rails\">esempio di avvio rapido di Ruby on Rails<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il caching \u00e8 essenziale per migliorare le prestazioni e la scalabilit\u00e0 delle applicazioni web e il caching in Ruby on Rails non fa eccezione. Memorizzando e &#8230;<\/p>\n","protected":false},"author":259,"featured_media":71104,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[25945],"class_list":["post-71103","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-linguaggi-sviluppo-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>Rails Caching: un Tutorial Veloce - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Scopri come la cache di Ruby on Rails aumenta le prestazioni e la scalabilit\u00e0 delle app, memorizzando e riutilizzando i dati a cui si accede di frequente.\" \/>\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\/it\/blog\/rails-caching\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Caching di Ruby on Rails: un Tutorial Veloce\" \/>\n<meta property=\"og:description\" content=\"Scopri come la cache di Ruby on Rails aumenta le prestazioni e la scalabilit\u00e0 delle app, memorizzando e riutilizzando i dati a cui si accede di frequente.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-10T08:46:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-11T07:45:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/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=\"Scopri come la cache di Ruby on Rails aumenta le prestazioni e la scalabilit\u00e0 delle app, memorizzando e riutilizzando i dati a cui si accede di frequente.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/07\/rails-caching.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Bonisteel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"Caching di Ruby on Rails: un Tutorial Veloce\",\"datePublished\":\"2023-07-10T08:46:34+00:00\",\"dateModified\":\"2023-07-11T07:45:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/\"},\"wordCount\":2004,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/07\/rails-caching.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/\",\"name\":\"Rails Caching: un Tutorial Veloce - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/07\/rails-caching.jpg\",\"datePublished\":\"2023-07-10T08:46:34+00:00\",\"dateModified\":\"2023-07-11T07:45:16+00:00\",\"description\":\"Scopri come la cache di Ruby on Rails aumenta le prestazioni e la scalabilit\u00e0 delle app, memorizzando e riutilizzando i dati a cui si accede di frequente.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/07\/rails-caching.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/07\/rails-caching.jpg\",\"width\":3043,\"height\":1522},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Linguaggi di Sviluppo Web\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/linguaggi-sviluppo-web\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Caching di Ruby on Rails: un Tutorial Veloce\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"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\/it\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\",\"name\":\"Steve Bonisteel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/stevebonisteel\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Rails Caching: un Tutorial Veloce - Kinsta\u00ae","description":"Scopri come la cache di Ruby on Rails aumenta le prestazioni e la scalabilit\u00e0 delle app, memorizzando e riutilizzando i dati a cui si accede di frequente.","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\/it\/blog\/rails-caching\/","og_locale":"it_IT","og_type":"article","og_title":"Caching di Ruby on Rails: un Tutorial Veloce","og_description":"Scopri come la cache di Ruby on Rails aumenta le prestazioni e la scalabilit\u00e0 delle app, memorizzando e riutilizzando i dati a cui si accede di frequente.","og_url":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-07-10T08:46:34+00:00","article_modified_time":"2023-07-11T07:45:16+00:00","og_image":[{"width":3043,"height":1522,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/07\/rails-caching.jpg","type":"image\/jpeg"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"Scopri come la cache di Ruby on Rails aumenta le prestazioni e la scalabilit\u00e0 delle app, memorizzando e riutilizzando i dati a cui si accede di frequente.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/07\/rails-caching.jpg","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Steve Bonisteel","Tempo di lettura stimato":"11 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"Caching di Ruby on Rails: un Tutorial Veloce","datePublished":"2023-07-10T08:46:34+00:00","dateModified":"2023-07-11T07:45:16+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/"},"wordCount":2004,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/07\/rails-caching.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/rails-caching\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/","url":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/","name":"Rails Caching: un Tutorial Veloce - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/07\/rails-caching.jpg","datePublished":"2023-07-10T08:46:34+00:00","dateModified":"2023-07-11T07:45:16+00:00","description":"Scopri come la cache di Ruby on Rails aumenta le prestazioni e la scalabilit\u00e0 delle app, memorizzando e riutilizzando i dati a cui si accede di frequente.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/rails-caching\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/07\/rails-caching.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/07\/rails-caching.jpg","width":3043,"height":1522},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/rails-caching\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Linguaggi di Sviluppo Web","item":"https:\/\/kinsta.com\/it\/argomenti\/linguaggi-sviluppo-web\/"},{"@type":"ListItem","position":3,"name":"Caching di Ruby on Rails: un Tutorial Veloce"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","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\/it\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f","name":"Steve Bonisteel","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/stevebonisteel\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/71103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/259"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=71103"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/71103\/revisions"}],"predecessor-version":[{"id":71145,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/71103\/revisions\/71145"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/71103\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/71103\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/71103\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/71103\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/71103\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/71103\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/71103\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/71103\/translations\/es"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/71103\/translations\/dk"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/71103\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/71104"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=71103"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=71103"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=71103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}