{"id":51518,"date":"2023-07-10T09:46:24","date_gmt":"2023-07-10T08:46:24","guid":{"rendered":"https:\/\/kinsta.com\/dk\/?p=51518&#038;preview=true&#038;preview_id=51518"},"modified":"2023-08-24T10:13:10","modified_gmt":"2023-08-24T09:13:10","slug":"rails-caching","status":"publish","type":"post","link":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/","title":{"rendered":"Ruby on Rails Caching: En hurtig vejledning"},"content":{"rendered":"<p>Caching er afg\u00f8rende for at forbedre ydeevnen og skalerbarheden af webapplikationer &#8211; og caching i <a href=\"https:\/\/kinsta.com\/blog\/ruby-on-rails-vs-node-js\/#what-is-ruby-on-rails\">Ruby on Rails<\/a> er ingen undtagelse. Ved at gemme og genbruge resultaterne af dyre beregninger eller databaseforesp\u00f8rgsler reducerer caching betydeligt den tid og de ressourcer, der kr\u00e6ves for at betjene brugerforesp\u00f8rgsler.<\/p>\n<p>Her gennemg\u00e5r vi, hvordan man implementerer forskellige typer af caching i Rails, s\u00e5som fragment-caching og Russian doll-caching. Vi viser dig ogs\u00e5, hvordan du h\u00e5ndterer cache-afh\u00e6ngigheder og v\u00e6lger cache-stores og skitserer bedste praksis for at bruge caching effektivt i en Rails-applikation.<\/p>\n<p>Denne artikel foruds\u00e6tter, at du er fortrolig med Ruby on Rails, bruger Rails version 6 eller h\u00f8jere og f\u00f8ler dig tryg ved at bruge <a href=\"https:\/\/guides.rubyonrails.org\/action_view_overview.html\" target=\"_blank\" rel=\"noopener noreferrer\">Rails views<\/a>. Kodeeksemplerne demonstrerer, hvordan man bruger caching i nye eller eksisterende view-skabeloner.<\/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>Typer af Ruby on Rails-cache<\/h2>\n<p>Der findes flere typer af caching i Ruby on Rails-applikationer, afh\u00e6ngigt af niveauet og granulariteten af det indhold, der skal caches. De prim\u00e6re typer, der bruges i moderne Rails-apps, er:<\/p>\n<ul>\n<li><strong>Fragment-caching<\/strong>: Cacher dele af en webside, der ikke \u00e6ndres ofte, s\u00e5som headers, footers, sidebars eller statisk indhold. Fragmentcaching reducerer antallet af delsider eller komponenter, der gengives p\u00e5 hver anmodning.<\/li>\n<li><strong>Russian doll<\/strong> <strong>caching<\/strong>: Cacher indlejrede fragmenter af en webside, der er afh\u00e6ngige af hinanden, som f.eks. samlinger og associationer. Russian doll caching forhindrer un\u00f8dvendige databaseforesp\u00f8rgsler og g\u00f8r det nemt at genbruge u\u00e6ndrede cachelagrede fragmenter.<\/li>\n<\/ul>\n<p>Yderligere to typer af caching var tidligere en del af Ruby on Rails, men er nu tilg\u00e6ngelige som separate gems:<\/p>\n<ul>\n<li><strong>Page caching<\/strong>: Cacher hele websider som statiske filer p\u00e5 serveren og omg\u00e5r hele sidens renderingslivscyklus<\/li>\n<li><strong>Action caching<\/strong>: Cacher output fra hele controller-handlinger. Det svarer til page caching, men giver dig mulighed for at anvende filtre som autentificering.<\/li>\n<\/ul>\n<p>Page- og action-caching bruges sj\u00e6ldent og anbefales ikke l\u00e6ngere til de fleste brugsscenarier i moderne Rails-apps.<\/p>\n<h2>Fragment-caching i Ruby on Rails<\/h2>\n<p>Fragment-caching lader dig cache dele af en side, der \u00e6ndres sj\u00e6ldent. For eksempel kan en side, der viser en liste over produkter med tilh\u00f8rende priser og bed\u00f8mmelser, cache detaljer, som sandsynligvis ikke vil \u00e6ndre sig.<\/p>\n<p>I mellemtiden kan det lade Rails genskabe dynamiske dele af siden &#8211; som kommentarer eller anmeldelser &#8211; ved hver sideindl\u00e6sning. Fragment-caching er mindre nyttigt, n\u00e5r en visnings underliggende data \u00e6ndres hyppigt p\u00e5 grund af de omkostninger, der er forbundet med hyppige opdateringer af cachen.<\/p>\n<p>Som den enkleste form for caching i Rails, b\u00f8r fragment-caching v\u00e6re dit f\u00f8rste valg, n\u00e5r du tilf\u00f8jer caching til din app for at forbedre ydeevnen.<\/p>\n<p>For at bruge fragment-caching i Rails skal du bruge <a href=\"https:\/\/api.rubyonrails.org\/v6.1.0\/classes\/ActionView\/Helpers\/CacheHelper.html\" target=\"_blank\" rel=\"noopener noreferrer\">hj\u00e6lpemetoden<\/a> <code>cache<\/code> i dine views. Skriv for eksempel f\u00f8lgende kode for at cache en produktdel i din visning:<\/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><code>cache<\/code> -hj\u00e6lperen genererer en cache-n\u00f8gle baseret p\u00e5 hvert elements klassenavn, <code>id<\/code>, og <code>updated_at<\/code> -tidsstempel (for eksempel <code>products\/1-20230501000000<\/code>). N\u00e6ste gang en bruger anmoder om det samme produkt, vil <code>cache<\/code> -hj\u00e6lperen hente det cachelagrede fragment fra cachelageret og vise det uden at l\u00e6se produktet fra databasen.<\/p>\n<p>Du kan ogs\u00e5 tilpasse cache-n\u00f8glen ved at sende indstillinger til <code>cache<\/code> -hj\u00e6lperen. Hvis du f.eks. vil inkludere et versionsnummer eller et tidsstempel i din cache-n\u00f8gle, skal du skrive noget i denne stil:<\/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>Alternativt kan du angive en udl\u00f8bstid:<\/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>Det f\u00f8rste eksempel vil tilf\u00f8je <code>v1<\/code> til cache-n\u00f8glen (for eksempel <code>products\/1-v1<\/code>). Dette er nyttigt til at ugyldigg\u00f8re cachen, n\u00e5r du \u00e6ndrer den delvise skabelon eller layout. Det andet eksempel angiver en udl\u00f8bstid for cache-posten (1 time), hvilket hj\u00e6lper med at udl\u00f8be for\u00e6ldede data.<\/p>\n<h2>Russian doll-cache i Ruby on Rails<\/h2>\n<p>Russian doll caching er en effektiv caching-strategi i Ruby on Rails, som optimerer din applikations ydeevne ved at indlejre caches i hinanden. Den bruger Rails fragment-caching og cache-afh\u00e6ngigheder til at minimere overfl\u00f8digt arbejde og forbedre indl\u00e6sningstiderne.<\/p>\n<p>I en typisk Rails-applikation renderer du ofte en samling af elementer, hver med flere underordnede komponenter. N\u00e5r du opdaterer et enkelt element, skal du undg\u00e5 at genskabe hele samlingen eller alle up\u00e5virkede elementer. Brug Russian Doll-caching, n\u00e5r du har at g\u00f8re med hierarkiske eller indlejrede datastrukturer, is\u00e6r n\u00e5r de indlejrede komponenter har deres egne tilknyttede data, der kan \u00e6ndre sig uafh\u00e6ngigt af hinanden.<\/p>\n<p>Ulempen ved Russian Doll-caching er, at det \u00f8ger kompleksiteten. Du skal forst\u00e5 relationerne mellem de indlejrede niveauer af elementer, du cacher, for at sikre, at du cacher de rigtige elementer. I nogle tilf\u00e6lde bliver du n\u00f8dt til at tilf\u00f8je associationer til dine <a href=\"https:\/\/guides.rubyonrails.org\/active_record_basics.html\" target=\"_blank\" rel=\"noopener noreferrer\">Active Record<\/a>-modeller, s\u00e5 Rails kan udlede relationerne mellem de cachede dataelementer.<\/p>\n<p>Som med almindelig fragment-caching bruger Russian doll-caching hj\u00e6lpemetoden <code>cache<\/code>. Hvis du f.eks. vil cache en kategori med dens underkategorier og produkter i din visning, skal du skrive noget i denne stil:<\/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><code>cache<\/code> -hj\u00e6lperen gemmer hvert indlejret niveau separat i cache-lageret. N\u00e6ste gang der anmodes om den samme kategori, vil den hente det cachelagrede fragment fra cachelageret og vise det uden at rendere det igen.<\/p>\n<p>Men hvis en underkategori eller et produkts detaljer \u00e6ndres &#8211; som navn eller beskrivelse &#8211; ugyldigg\u00f8res det cachelagrede fragment, som derefter gengives med opdaterede data. Russian doll caching sikrer, at du ikke beh\u00f8ver at ugyldigg\u00f8re en hel kategori, hvis en enkelt underkategori eller et produkt \u00e6ndres.<\/p>\n<h2>H\u00e5ndtering af cache-afh\u00e6ngighed i Ruby on Rails<\/h2>\n<p>Cache-afh\u00e6ngigheder er relationer mellem cachelagrede data og deres underliggende kilder, og det kan v\u00e6re vanskeligt at styre dem. Hvis kildedataene \u00e6ndres, b\u00f8r alle tilknyttede cachede data udl\u00f8be.<\/p>\n<p>Rails kan bruge tidsstempler til at styre de fleste cache-afh\u00e6ngigheder automatisk. Hver Active Record-model har <code>created_at<\/code> og <code>updated_at<\/code> attributter, der angiver, hvorn\u00e5r cachen oprettede eller sidst opdaterede posten. For at sikre, at Rails automatisk kan styre caching, skal du definere dine Active Record-modellers relationer som f\u00f8lger:<\/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>I dette eksempel:<\/p>\n<ul>\n<li>Hvis du opdaterer en produktoptegnelse (for eksempel ved at \u00e6ndre prisen), \u00e6ndres dens <code>updated_at<\/code> tidsstempel automatisk.<\/li>\n<li>Hvis du bruger dette tidsstempel som en del af din cache-n\u00f8gle (som <code> products\/1-20230504000000<\/code>), invaliderer det ogs\u00e5 automatisk dit cachelagrede fragment.<\/li>\n<li>For at ugyldigg\u00f8re din kategoris cachelagrede fragment, n\u00e5r du opdaterer en produktpost &#8211; m\u00e5ske fordi den viser nogle aggregerede data som gennemsnitspris &#8211; skal du bruge <code>touch<\/code> -metoden i din controller (<code>@product.category.touch<\/code>) eller tilf\u00f8je en <code>touch<\/code> -indstilling i din modelassociation (<code>belongs_to :category touch: true<\/code>).<\/li>\n<\/ul>\n<p>En anden mekanisme til at styre cache-afh\u00e6ngigheder er at bruge caching-metoder p\u00e5 lavt niveau &#8211; s\u00e5som <code>fetch<\/code> og <code>write<\/code> &#8211; direkte i dine modeller eller controllere. Disse metoder giver dig mulighed for at gemme vilk\u00e5rlige data eller indhold i din cache-butik med brugerdefinerede n\u00f8gler og muligheder. For eksempel:<\/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>Dette eksempel viser, hvordan man cacher beregnede data &#8211; s\u00e5som gennemsnitsprisen for alle produkter &#8211; i en time ved hj\u00e6lp af <code>fetch<\/code> -metoden med en brugerdefineret n\u00f8gle (<code>products\/average_price<\/code>) og en udl\u00f8bsindstilling (<code>expires_in: 1.hour<\/code>).<\/p>\n<p>Metoden <code>fetch<\/code> vil f\u00f8rst fors\u00f8ge at l\u00e6se dataene fra cache-lageret. Hvis den ikke kan finde dataene, eller hvis dataene er udl\u00f8bet, udf\u00f8rer den blokken og gemmer resultatet i cache-lageret.<\/p>\n<p>Hvis du manuelt vil ugyldigg\u00f8re en cache-post f\u00f8r dens udl\u00f8bstid, skal du bruge metoden <code>write<\/code> med optionen <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-stores og backends i Ruby on Rails<\/h2>\n<p>Rails giver dig mulighed for at v\u00e6lge forskellige cache stores eller backends til at gemme dine cachelagrede data og indhold. Rails cache store er et abstraktionslag, der giver en f\u00e6lles gr\u00e6nseflade til at interagere med forskellige lagersystemer. En cache-backend implementerer cache-store-gr\u00e6nsefladen for et specifikt lagersystem.<\/p>\n<p>Rails underst\u00f8tter flere typer cache-stores eller backends fra start, som er beskrevet nedenfor.<\/p>\n<h3>Hukommelseslager<\/h3>\n<p>Memory store bruger en in-memory hash som cache-lager. Det er hurtigt og enkelt, men har begr\u00e6nset kapacitet og persistens. Denne cache store er velegnet til udviklings- og testmilj\u00f8er eller sm\u00e5, enkle applikationer.<\/p>\n<h3>Disklager<\/h3>\n<p>Disk store bruger filer p\u00e5 disken som cache-lager. Det er den langsomste caching-mulighed i Rails, men har stor kapacitet og vedholdenhed. Disk store er velegnet til applikationer, der skal cache store m\u00e6ngder data og ikke har brug for maksimal ydeevne.<\/p>\n<h3>Redis<\/h3>\n<p>Redis store bruger en <a href=\"https:\/\/kinsta.com\/blog\/redis-vs-mongodb\/#redis-with-kinsta\">Redis<\/a>-instans til cache-lagring. Redis er et in-memory datalager, der underst\u00f8tter flere datatyper. Selvom det er hurtigt og fleksibelt, kr\u00e6ver det en separat server og konfiguration. Det er velegnet til applikationer, der skal cache komplekse eller dynamiske data, der \u00e6ndres ofte. Redis er et ideelt valg, n\u00e5r man k\u00f8rer Rails-apps i skyen, fordi nogle hostingudbydere, herunder Kinsta, tilbyder <a href=\"https:\/\/kinsta.com\/docs\/wordpress-hosting\/caching\/redis-cache\/\">Redis som en persistent objektcache<\/a>.<\/p>\n<h3>Memcached<\/h3>\n<p>Memcached-butikken bruger en <a href=\"https:\/\/kinsta.com\/blog\/memcached-vs-redis\/\">Memcached<\/a>-instans til cache-lagring. Memcached er en in-memory key-value store, der underst\u00f8tter simple datatyper og funktioner. Det er hurtigt og skalerbart, men ligesom Redis kr\u00e6ver det en separat server og konfiguration. Dette lager er velegnet til applikationer, der har brug for at cache simple eller statiske data, som opdateres hyppigt.<\/p>\n<p>Du kan konfigurere din cache-butik i dine Rails-milj\u00f8filer (f.eks. <strong>config\/environments\/development.rb<\/strong>) ved hj\u00e6lp af indstillingen <code>config.cache_store<\/code>. Her kan du se, hvordan du bruger hver af Rails&#8217; indbyggede cachemetoder:<\/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>Du b\u00f8r kun have \u00e9t <code>config.cache_store<\/code> -kald pr. milj\u00f8fil. Hvis du har mere end \u00e9t, bruger cache-lageret kun det sidste.<\/p>\n<p>Hver cache store har unikke fordele og ulemper afh\u00e6ngigt af din applikations behov og pr\u00e6ferencer. V\u00e6lg den, der passer bedst til din brugssituation og dit erfaringsniveau.<\/p>\n<h2>Bedste praksis for Ruby on Rails-caching<\/h2>\n<p>Brug af caching i din Rails-applikation kan \u00f8ge dens ydeevne og skalerbarhed betydeligt, is\u00e6r n\u00e5r du implementerer f\u00f8lgende best practices:<\/p>\n<ul>\n<li><strong>Cache selektivt<\/strong>: Cach kun data, der ofte tilg\u00e5s, er dyre at generere eller opdateres sj\u00e6ldent. Undg\u00e5 at overcache for at forhindre overdreven brug af hukommelse, risiko for uaktuelle data og forringelse af ydeevnen.<\/li>\n<li><strong>Udl\u00f8b af cache-poster<\/strong>: Forebyg for\u00e6ldede data ved at udl\u00f8be ugyldige eller irrelevante poster. Brug tidsstempler, udl\u00f8bsindstillinger eller manuel ugyldigg\u00f8relse.<\/li>\n<li><strong>Optimer cache-ydelsen<\/strong>: V\u00e6lg det cachelager, der passer til din applikations behov, og finjuster dets parametre &#8211; som st\u00f8rrelse, komprimering eller serialisering &#8211; for optimal ydeevne.<\/li>\n<li><strong>Overv\u00e5g og test cache-effekten<\/strong>: Evaluer cache-adf\u00e6rd &#8211; som hit rate, miss rate og latency &#8211; og vurder deres respektive indvirkning p\u00e5 performance (responstid, throughput, ressourceforbrug). Brug v\u00e6rkt\u00f8jer som <a href=\"https:\/\/kinsta.com\/docs\/wordpress-hosting\/wordpress-monitoring\/custom-new-relic-tracking\/\">New Relic<\/a>, <a href=\"https:\/\/guides.rubyonrails.org\/debugging_rails_applications.html#the-logger\" target=\"_blank\" rel=\"noopener noreferrer\">Rails logs<\/a>, <a href=\"https:\/\/api.rubyonrails.org\/classes\/ActiveSupport\/Notifications.html\" target=\"_blank\" rel=\"noopener noreferrer\">ActiveSupport notifikationer<\/a> eller <a href=\"https:\/\/github.com\/MiniProfiler\/rack-mini-profiler\" target=\"_blank\" rel=\"noopener noreferrer\">Rack mini profiler<\/a>.<\/li>\n<\/ul>\n<h2>Opsummering<\/h2>\n<p>Ruby on Rails caching forbedrer applikationens ydeevne og skalerbarhed ved effektivt at gemme og genbruge data eller indhold, der ofte tilg\u00e5s. Med en dybere forst\u00e5else af caching-teknikker er du bedre rustet til at levere hurtigere Rails-apps til dine brugere.<\/p>\n<p>N\u00e5r du implementerer din optimerede Rails-applikation, kan du henvende dig til Kinstas <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Applikation Hosting<\/a>-platform. Kom i gang gratis med en <a href=\"https:\/\/sevalla.com\/pricing\/\">Hobby Tier<\/a>-konto, og udforsk platformen med dette <a href=\"https:\/\/docs.sevalla.com\/templates\/overview#ruby-on-rails\">Ruby on Rails quick-start-eksempel<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Caching er afg\u00f8rende for at forbedre ydeevnen og skalerbarheden af webapplikationer &#8211; og caching i Ruby on Rails er ingen undtagelse. Ved at gemme og genbruge &#8230;<\/p>\n","protected":false},"author":259,"featured_media":51519,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[745],"class_list":["post-51518","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-web-udvikling-sprog"],"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: En Hurtig Tutorial - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"L\u00e6r, hvordan Ruby on Rails caching \u00f8ger applikationens ydeevne og skalerbarhed ved effektivt at gemme og genbruge hyppigt tilg\u00e5ede data.\" \/>\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\/dk\/blog\/rails-caching\/\" \/>\n<meta property=\"og:locale\" content=\"da_DK\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruby on Rails Caching: En hurtig vejledning\" \/>\n<meta property=\"og:description\" content=\"L\u00e6r, hvordan Ruby on Rails caching \u00f8ger applikationens ydeevne og skalerbarhed ved effektivt at gemme og genbruge hyppigt tilg\u00e5ede data.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-10T08:46:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-24T09:13:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/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=\"L\u00e6r, hvordan Ruby on Rails caching \u00f8ger applikationens ydeevne og skalerbarhed ved effektivt at gemme og genbruge hyppigt tilg\u00e5ede data.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/07\/rails-caching.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_dk\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_dk\" \/>\n<meta name=\"twitter:label1\" content=\"Skrevet af\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Bonisteel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimeret l\u00e6setid\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"Ruby on Rails Caching: En hurtig vejledning\",\"datePublished\":\"2023-07-10T08:46:24+00:00\",\"dateModified\":\"2023-08-24T09:13:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/\"},\"wordCount\":1783,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/07\/rails-caching.jpg\",\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/\",\"url\":\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/\",\"name\":\"Rails Caching: En Hurtig Tutorial - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/07\/rails-caching.jpg\",\"datePublished\":\"2023-07-10T08:46:24+00:00\",\"dateModified\":\"2023-08-24T09:13:10+00:00\",\"description\":\"L\u00e6r, hvordan Ruby on Rails caching \u00f8ger applikationens ydeevne og skalerbarhed ved effektivt at gemme og genbruge hyppigt tilg\u00e5ede data.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#breadcrumb\"},\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/07\/rails-caching.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/07\/rails-caching.jpg\",\"width\":3043,\"height\":1522},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/dk\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webudviklingssprog\",\"item\":\"https:\/\/kinsta.com\/dk\/emner\/web-udvikling-sprog\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ruby on Rails Caching: En hurtig vejledning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/dk\/#website\",\"url\":\"https:\/\/kinsta.com\/dk\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Hurtig, sikker, premium hostingl\u00f8sninger\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/dk\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"da-DK\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/dk\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/\",\"https:\/\/x.com\/kinsta_dk\",\"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\/dk\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\",\"name\":\"Steve Bonisteel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/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\/dk\/blog\/author\/stevebonisteel\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Rails Caching: En Hurtig Tutorial - Kinsta\u00ae","description":"L\u00e6r, hvordan Ruby on Rails caching \u00f8ger applikationens ydeevne og skalerbarhed ved effektivt at gemme og genbruge hyppigt tilg\u00e5ede data.","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\/dk\/blog\/rails-caching\/","og_locale":"da_DK","og_type":"article","og_title":"Ruby on Rails Caching: En hurtig vejledning","og_description":"L\u00e6r, hvordan Ruby on Rails caching \u00f8ger applikationens ydeevne og skalerbarhed ved effektivt at gemme og genbruge hyppigt tilg\u00e5ede data.","og_url":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/","article_published_time":"2023-07-10T08:46:24+00:00","article_modified_time":"2023-08-24T09:13:10+00:00","og_image":[{"width":3043,"height":1522,"url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/07\/rails-caching.jpg","type":"image\/jpeg"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"L\u00e6r, hvordan Ruby on Rails caching \u00f8ger applikationens ydeevne og skalerbarhed ved effektivt at gemme og genbruge hyppigt tilg\u00e5ede data.","twitter_image":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/07\/rails-caching.jpg","twitter_creator":"@kinsta_dk","twitter_site":"@kinsta_dk","twitter_misc":{"Skrevet af":"Steve Bonisteel","Estimeret l\u00e6setid":"9 minutter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"Ruby on Rails Caching: En hurtig vejledning","datePublished":"2023-07-10T08:46:24+00:00","dateModified":"2023-08-24T09:13:10+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/"},"wordCount":1783,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/dk\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/07\/rails-caching.jpg","inLanguage":"da-DK","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/","url":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/","name":"Rails Caching: En Hurtig Tutorial - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/dk\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/07\/rails-caching.jpg","datePublished":"2023-07-10T08:46:24+00:00","dateModified":"2023-08-24T09:13:10+00:00","description":"L\u00e6r, hvordan Ruby on Rails caching \u00f8ger applikationens ydeevne og skalerbarhed ved effektivt at gemme og genbruge hyppigt tilg\u00e5ede data.","breadcrumb":{"@id":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#breadcrumb"},"inLanguage":"da-DK","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/dk\/blog\/rails-caching\/"]}]},{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#primaryimage","url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/07\/rails-caching.jpg","contentUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/07\/rails-caching.jpg","width":3043,"height":1522},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/dk\/blog\/rails-caching\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/dk\/"},{"@type":"ListItem","position":2,"name":"Webudviklingssprog","item":"https:\/\/kinsta.com\/dk\/emner\/web-udvikling-sprog\/"},{"@type":"ListItem","position":3,"name":"Ruby on Rails Caching: En hurtig vejledning"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/dk\/#website","url":"https:\/\/kinsta.com\/dk\/","name":"Kinsta\u00ae","description":"Hurtig, sikker, premium hostingl\u00f8sninger","publisher":{"@id":"https:\/\/kinsta.com\/dk\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/dk\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"da-DK"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/dk\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/dk\/","logo":{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/","https:\/\/x.com\/kinsta_dk","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\/dk\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f","name":"Steve Bonisteel","image":{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/#\/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\/dk\/blog\/author\/stevebonisteel\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/51518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/users\/259"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/comments?post=51518"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/51518\/revisions"}],"predecessor-version":[{"id":51549,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/51518\/revisions\/51549"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/51518\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/51518\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/51518\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/51518\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/51518\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/51518\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/51518\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/51518\/translations\/es"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/51518\/translations\/dk"},{"href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/51518\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/media\/51519"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/media?parent=51518"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/tags?post=51518"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/topic?post=51518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}