{"id":63602,"date":"2023-07-10T09:46:26","date_gmt":"2023-07-10T08:46:26","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=63602&#038;preview=true&#038;preview_id=63602"},"modified":"2023-07-27T13:56:23","modified_gmt":"2023-07-27T12:56:23","slug":"rails-caching","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/","title":{"rendered":"Ruby on Rails Caching: Ein kurzes Tutorial"},"content":{"rendered":"<p>Caching ist wichtig, um die Leistung und Skalierbarkeit von Webanwendungen zu verbessern &#8211; und Caching in <a href=\"https:\/\/kinsta.com\/de\/blog\/ruby-on-rails-vs-node-js\/#what-is-ruby-on-rails\">Ruby on Rails<\/a> ist da keine Ausnahme. Durch das Speichern und Wiederverwenden der Ergebnisse teurer Berechnungen oder Datenbankabfragen reduziert das Caching die Zeit und die Ressourcen, die f\u00fcr die Bearbeitung von Nutzeranfragen ben\u00f6tigt werden, erheblich.<\/p>\n<p>Wir zeigen dir, wie du verschiedene Arten von Caching in Rails implementieren kannst, z. B. Fragment Caching und Russian Doll Caching. Au\u00dferdem zeigen wir dir, wie du Cache-Abh\u00e4ngigkeiten verwaltest, Cache-Speicher ausw\u00e4hlst und Best Practices f\u00fcr den effektiven Einsatz von Caching in einer Rails-Anwendung umrei\u00dft.<\/p>\n<p>Dieser Artikel setzt voraus, dass du dich mit Ruby on Rails auskennst, Rails Version 6 oder h\u00f6her verwendest und mit <a href=\"https:\/\/guides.rubyonrails.org\/action_view_overview.html\" target=\"_blank\" rel=\"noopener noreferrer\">Rails Views<\/a> vertraut bist. Die Codebeispiele zeigen, wie du Caching in neuen oder bestehenden View-Templates einsetzen kannst.<\/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>Arten von Ruby on Rails-Caching<\/h2>\n<p>In Ruby on Rails-Anwendungen gibt es verschiedene Arten des Cachings, die von der Ebene und Granularit\u00e4t des zu cachenden Inhalts abh\u00e4ngen. Die wichtigsten Arten, die in modernen Rails-Anwendungen verwendet werden, sind:<\/p>\n<ul>\n<li><strong>Fragment-Caching<\/strong>: Hier werden Teile einer Webseite gecached, die sich nicht h\u00e4ufig \u00e4ndern, wie Kopf- und Fu\u00dfzeilen, Seitenleisten oder statische Inhalte. Das Caching von Fragmenten reduziert die Anzahl der Teilbereiche oder Komponenten, die bei jeder Anfrage gerendert werden.<\/li>\n<li><strong>Russian-Doll-Caching<\/strong>: Caching verschachtelter Fragmente einer Webseite, die voneinander abh\u00e4ngen, wie z. B. Sammlungen und Verkn\u00fcpfungen. Das Russian-Doll-Caching verhindert unn\u00f6tige Datenbankabfragen und erleichtert die Wiederverwendung von unver\u00e4nderten Fragmenten im Cache.<\/li>\n<\/ul>\n<p>Zwei weitere Arten des Cachings waren fr\u00fcher Teil von Ruby on Rails, sind aber jetzt als separate Gems verf\u00fcgbar:<\/p>\n<ul>\n<li><strong>Seiten-Caching<\/strong>: Zwischenspeichern ganzer Webseiten als statische Dateien auf dem Server, wobei der gesamte Lebenszyklus des Seiten-Renderings umgangen wird<\/li>\n<li><strong>Action-Caching<\/strong>: Zwischenspeichern der Ausgabe ganzer Controller-Aktionen. Es \u00e4hnelt dem Seiten-Caching, erm\u00f6glicht dir aber die Anwendung von Filtern wie der Authentifizierung.<\/li>\n<\/ul>\n<p>Seiten- und Aktionscaching werden nur selten verwendet und f\u00fcr die meisten Anwendungsf\u00e4lle in modernen Rails-Anwendungen nicht mehr empfohlen.<\/p>\n<h2>Fragment-Caching in Ruby on Rails<\/h2>\n<p>Mit dem Fragment-Caching kannst du Teile einer Seite zwischenspeichern, die sich nur selten \u00e4ndern. Zum Beispiel k\u00f6nnte eine Seite, die eine Liste von Produkten mit den dazugeh\u00f6rigen Preisen und Bewertungen anzeigt, Details zwischenspeichern, die sich wahrscheinlich nicht \u00e4ndern werden.<\/p>\n<p>Gleichzeitig kann Rails dynamische Teile der Seite &#8211; wie Kommentare oder Bewertungen &#8211; bei jedem Laden der Seite neu darstellen. Das Zwischenspeichern von Fragmenten ist weniger n\u00fctzlich, wenn sich die zugrunde liegenden Daten einer Ansicht h\u00e4ufig \u00e4ndern, da der Cache h\u00e4ufig aktualisiert werden muss.<\/p>\n<p>Als einfachste Art des Cachings in Rails sollte Fragment-Caching deine erste Wahl sein, wenn du deine Anwendung mit Caching ausstattest, um die Leistung zu verbessern.<\/p>\n<p>Um Fragment-Caching in Rails zu nutzen, verwende die <a href=\"https:\/\/api.rubyonrails.org\/v6.1.0\/classes\/ActionView\/Helpers\/CacheHelper.html\" target=\"_blank\" rel=\"noopener noreferrer\">Hilfsmethode<\/a> <code>cache<\/code> in deinen Views. Schreibe zum Beispiel den folgenden Code, um ein Teilprodukt in deiner Ansicht zwischenzuspeichern:<\/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>Die Hilfsmethode <code>cache<\/code> generiert einen Cache-Schl\u00fcssel, der auf dem Klassennamen jedes Elements, <code>id<\/code>, und dem Zeitstempel von <code>updated_at<\/code> basiert (zum Beispiel <code>products\/1-20230501000000<\/code>). Wenn ein Nutzer das n\u00e4chste Mal dasselbe Produkt anfordert, holt der <code>cache<\/code>-Helfer das zwischengespeicherte Fragment aus dem Cache-Speicher und zeigt es an, ohne das Produkt aus der Datenbank zu lesen.<\/p>\n<p>Du kannst den Cache-Schl\u00fcssel auch anpassen, indem du dem Helfer <code>cache<\/code> Optionen \u00fcbergibst. Wenn du z. B. eine Versionsnummer oder einen Zeitstempel in deinen Cache-Schl\u00fcssel einf\u00fcgen m\u00f6chtest, schreibe etwas wie das Folgende:<\/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>Alternativ kannst du auch eine Ablaufzeit festlegen:<\/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>Im ersten Beispiel wird <code>v1<\/code> an den Cache-Schl\u00fcssel angeh\u00e4ngt (zum Beispiel <code>products\/1-v1<\/code>). Das ist n\u00fctzlich, um den Cache ung\u00fcltig zu machen, wenn du die Teilvorlage oder das Layout \u00e4nderst. Das zweite Beispiel legt eine Verfallszeit f\u00fcr den Cache-Eintrag fest (1 Stunde), die dabei hilft, veraltete Daten ablaufen zu lassen.<\/p>\n<h2>Russian-Doll-Caching in Ruby on Rails<\/h2>\n<p>Russian-Doll-Caching ist eine leistungsstarke Caching-Strategie in Ruby on Rails, die die Leistung deiner Anwendung optimiert, indem sie Caches ineinander verschachtelt. Es nutzt das Rails-Fragment-Caching und Cache-Abh\u00e4ngigkeiten, um redundante Arbeit zu minimieren und die Ladezeiten zu verbessern.<\/p>\n<p>In einer typischen Rails-Anwendung renderst du oft eine Sammlung von Elementen, von denen jedes mehrere untergeordnete Komponenten hat. Wenn du ein einzelnes Element aktualisierst, solltest du vermeiden, die gesamte Sammlung oder alle nicht betroffenen Elemente neu zu rendern. Verwende Russian-Doll-Caching, wenn du mit hierarchischen oder verschachtelten Datenstrukturen arbeitest, besonders wenn die verschachtelten Komponenten ihre eigenen Daten haben, die sich unabh\u00e4ngig voneinander \u00e4ndern k\u00f6nnen.<\/p>\n<p>Der Nachteil von Russian-Doll-Caching ist, dass es die Komplexit\u00e4t erh\u00f6ht. Du musst die Beziehungen zwischen den verschachtelten Ebenen der Elemente, die du zwischenspeichern willst, verstehen, um sicherzustellen, dass du die richtigen Elemente zwischenspeicherst. In manchen F\u00e4llen musst du Assoziationen zu deinen <a href=\"https:\/\/guides.rubyonrails.org\/active_record_basics.html\" target=\"_blank\" rel=\"noopener noreferrer\">Active Record<\/a>-Modellen hinzuf\u00fcgen, damit Rails die Beziehungen zwischen den zwischengespeicherten Datenelementen ableiten kann.<\/p>\n<p>Wie beim normalen Fragment-Caching wird auch beim Russian-Doll-Caching die Hilfsmethode <code>cache<\/code> verwendet. Wenn du zum Beispiel eine Kategorie mit ihren Unterkategorien und Produkten in deiner Ansicht zwischenspeichern m\u00f6chtest, schreibst du etwas wie folgendes:<\/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>Der <code>cache<\/code>-Helfer speichert jede verschachtelte Ebene separat im Cache-Speicher. Wenn die gleiche Kategorie das n\u00e4chste Mal angefordert wird, holt sie ihr zwischengespeichertes Fragment aus dem Cache-Speicher und zeigt es an, ohne es erneut zu rendern.<\/p>\n<p>Wenn sich jedoch die Details einer Unterkategorie oder eines Produkts \u00e4ndern &#8211; z. B. der Name oder die Beschreibung -, wird das zwischengespeicherte Fragment ung\u00fcltig und mit den aktualisierten Daten neu gerendert. Das Russian-Doll-Caching sorgt daf\u00fcr, dass du nicht eine ganze Kategorie ung\u00fcltig machen musst, wenn sich eine einzelne Unterkategorie oder ein Produkt \u00e4ndert.<\/p>\n<h2>Cache-Abh\u00e4ngigkeitsmanagement in Ruby on Rails<\/h2>\n<p>Cache-Abh\u00e4ngigkeiten sind Beziehungen zwischen zwischengespeicherten Daten und den zugrundeliegenden Quellen, deren Verwaltung kompliziert sein kann. Wenn sich die Quelldaten \u00e4ndern, sollten alle zugeh\u00f6rigen gecachten Daten ablaufen.<\/p>\n<p>Rails kann Zeitstempel verwenden, um die meisten Cache-Abh\u00e4ngigkeiten automatisch zu verwalten. Jedes Active Record-Modell hat die Attribute <code>created_at<\/code> und <code>updated_at<\/code>, die angeben, wann der Cache den Datensatz erstellt oder zuletzt aktualisiert hat. Um sicherzustellen, dass Rails das Caching automatisch verwalten kann, definierst du die Beziehungen deiner Active Record-Modelle wie folgt:<\/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 diesem Beispiel:<\/p>\n<ul>\n<li>Wenn du einen Produktdatensatz aktualisierst (z. B. indem du den Preis \u00e4nderst), \u00e4ndert sich der Zeitstempel <code>updated_at<\/code> automatisch.<\/li>\n<li>Wenn du diesen Zeitstempel als Teil deines Cache-Schl\u00fcssels verwendest (z. B. <code> products\/1-20230504000000<\/code>), wird dadurch auch dein gecachtes Fragment automatisch ung\u00fcltig.<\/li>\n<li>Um das zwischengespeicherte Fragment deiner Kategorie ung\u00fcltig zu machen, wenn du einen Produktdatensatz aktualisierst &#8211; z. B. weil er aggregierte Daten wie den Durchschnittspreis anzeigt -, verwende die Methode <code>touch<\/code> in deinem Controller (<code>@product.category.touch<\/code>) oder f\u00fcge eine Option <code>touch<\/code> in deiner Modellzuordnung hinzu (<code>belongs_to :category touch: true<\/code>).<\/li>\n<\/ul>\n<p>Ein weiterer Mechanismus zur Verwaltung von Cache-Abh\u00e4ngigkeiten ist die Verwendung von Low-Level-Caching-Methoden &#8211; wie <code>fetch<\/code> und <code>write<\/code> &#8211; direkt in deinen Modellen oder Controllern. Mit diesen Methoden kannst du beliebige Daten oder Inhalte in deinem Cache-Speicher mit benutzerdefinierten Schl\u00fcsseln und Optionen speichern. Ein Beispiel:<\/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>In diesem Beispiel wird gezeigt, wie du berechnete Daten &#8211; z. B. den Durchschnittspreis aller Produkte &#8211; mit der Methode <code>fetch<\/code> mit einem benutzerdefinierten Schl\u00fcssel (<code>products\/average_price<\/code>) und einer Ablaufoption (<code>expires_in: 1.hour<\/code>) eine Stunde lang zwischenspeichern kannst.<\/p>\n<p>Die Methode <code>fetch<\/code> versucht zun\u00e4chst, die Daten aus dem Cache-Speicher zu lesen. Wenn sie die Daten nicht finden kann oder die Daten abgelaufen sind, f\u00fchrt sie den Block aus und speichert das Ergebnis im Cache-Speicher.<\/p>\n<p>Um einen Cache-Eintrag vor Ablauf der Frist manuell zu deaktivieren, verwendest du die Methode <code>write<\/code> mit der Option <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-Speicher und Backends in Ruby on Rails<\/h2>\n<p>In Rails kannst du verschiedene Cache-Speicher oder Backends ausw\u00e4hlen, um deine gecachten Daten und Inhalte zu speichern. Der Rails-Cache-Speicher ist eine Abstraktionsschicht, die eine gemeinsame Schnittstelle f\u00fcr die Interaktion mit verschiedenen Speichersystemen bietet. Ein Cache-Backend implementiert die Cache-Speicher-Schnittstelle f\u00fcr ein bestimmtes Speichersystem.<\/p>\n<p>Rails unterst\u00fctzt von Haus aus mehrere Arten von Cache-Speichern oder Backends, die im Folgenden n\u00e4her beschrieben werden.<\/p>\n<h3>Memory Store<\/h3>\n<p>Der Memory Store verwendet einen In-Memory-Hash als Cache-Speicher. Er ist schnell und einfach, hat aber eine begrenzte Kapazit\u00e4t und Persistenz. Dieser Cache-Speicher ist f\u00fcr Entwicklungs- und Testumgebungen oder kleine, einfache Anwendungen geeignet.<\/p>\n<h3>Disk Store<\/h3>\n<p>Der Disk Store verwendet Dateien auf der Festplatte als Cache-Speicher. Er ist die langsamste Cache-Option in Rails, verf\u00fcgt aber \u00fcber eine gro\u00dfe Kapazit\u00e4t und Persistenz. Disk Store eignet sich f\u00fcr Anwendungen, die gro\u00dfe Datenmengen zwischenspeichern m\u00fcssen und nicht die maximale Leistung ben\u00f6tigen.<\/p>\n<h3>Redis<\/h3>\n<p>Der Redis-Speicher verwendet eine <a href=\"https:\/\/kinsta.com\/de\/blog\/redis-vs-mongodb\/#redis-with-kinsta\">Redis<\/a>-Instanz f\u00fcr den Cache-Speicher. Redis ist ein In-Memory-Datenspeicher, der verschiedene Datentypen unterst\u00fctzt. Er ist zwar schnell und flexibel, erfordert aber einen eigenen Server und eine eigene Konfiguration. Er ist f\u00fcr Anwendungen geeignet, die komplexe oder dynamische Daten zwischenspeichern m\u00fcssen, die sich h\u00e4ufig \u00e4ndern. Redis ist die ideale Wahl, wenn du Rails-Anwendungen in der Cloud laufen l\u00e4sst, denn einige Hosting-Anbieter, darunter Kinsta, bieten <a href=\"https:\/\/kinsta.com\/de\/docs\/wordpress-hosting\/caching\/redis-cache\/\">Redis als persistenten Objekt-Cache<\/a> an.<\/p>\n<h3>Memcached<\/h3>\n<p>Der Memcached-Store verwendet eine <a href=\"https:\/\/kinsta.com\/de\/blog\/memcached-vs-redis\/\">Memcached<\/a>-Instanz f\u00fcr die Cache-Speicherung. Memcached ist ein In-Memory-Schl\u00fcsselwertspeicher, der einfache Datentypen und Funktionen unterst\u00fctzt. Er ist schnell und skalierbar, aber wie Redis erfordert er einen eigenen Server und eine eigene Konfiguration. Dieser Speicher ist f\u00fcr Anwendungen geeignet, die einfache oder statische Daten zwischenspeichern m\u00fcssen, die h\u00e4ufig aktualisiert werden.<\/p>\n<p>Du kannst deinen Cache-Speicher in deinen Rails-Umgebungsdateien (zum Beispiel <strong>config\/environments\/development.rb<\/strong>) mit der Option <code>config.cache_store<\/code> konfigurieren. Hier erf\u00e4hrst du, wie du die eingebauten Caching-Methoden von Rails verwendest:<\/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 solltest nur einen <code>config.cache_store<\/code> Aufruf pro Umgebungsdatei haben. Wenn du mehr als einen hast, verwendet der Cache-Speicher nur den letzten.<\/p>\n<p>Jeder Cache-Speicher hat einzigartige Vor- und Nachteile, die von den Bed\u00fcrfnissen und Vorlieben deiner Anwendung abh\u00e4ngen. W\u00e4hle den Speicher, der am besten zu deinem Anwendungsfall und deiner Erfahrung passt.<\/p>\n<h2>Best Practices f\u00fcr Ruby on Rails Caching<\/h2>\n<p>Der Einsatz von Caching in deiner Rails-Anwendung kann ihre Leistung und Skalierbarkeit erheblich steigern, vor allem wenn du die folgenden Best Practices umsetzt:<\/p>\n<ul>\n<li><strong>Cache selektiv<\/strong>: Cache nur Daten, auf die h\u00e4ufig zugegriffen wird, die teuer zu generieren sind oder die selten aktualisiert werden. Vermeide \u00fcberm\u00e4\u00dfiges Caching, um \u00fcberm\u00e4\u00dfigen Speicherverbrauch, das Risiko veralteter Daten und Leistungseinbu\u00dfen zu vermeiden.<\/li>\n<li><strong>Cache-Eintr\u00e4ge ablaufen lassen<\/strong>: Verhindere veraltete Daten, indem du ung\u00fcltige oder irrelevante Eintr\u00e4ge verfallen l\u00e4sst. Verwende Zeitstempel, Ablaufoptionen oder die manuelle Ung\u00fcltigkeitserkl\u00e4rung.<\/li>\n<li><strong>Optimiere die Cache-Leistung<\/strong>: W\u00e4hle den Cache-Speicher, der zu den Anforderungen deiner Anwendung passt, und passe seine Parameter &#8211; wie Gr\u00f6\u00dfe, Komprimierung oder Serialisierung &#8211; an, um eine optimale Leistung zu erzielen.<\/li>\n<li><strong>\u00dcberwache und teste die Auswirkungen des Caches<\/strong>: Beurteile das Cache-Verhalten &#8211; wie Hit-Rate, Miss-Rate und Latenz &#8211; und bewerte ihre jeweiligen Auswirkungen auf die Leistung (Antwortzeit, Durchsatz, Ressourcenverbrauch). Verwende Tools wie <a href=\"https:\/\/kinsta.com\/de\/docs\/wordpress-hosting\/wordpress-ueberwachung\/benutzerdefiniertes-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-Benachrichtigungen<\/a> oder den <a href=\"https:\/\/github.com\/MiniProfiler\/rack-mini-profiler\" target=\"_blank\" rel=\"noopener noreferrer\">Rack Mini Profiler<\/a>.<\/li>\n<\/ul>\n<h2>Zusammenfassung<\/h2>\n<p>Das Caching von Ruby on Rails verbessert die Leistung und Skalierbarkeit von Anwendungen, indem es h\u00e4ufig genutzte Daten oder Inhalte effizient speichert und wiederverwendet. Mit einem tieferen Verst\u00e4ndnis der Caching-Techniken bist du besser ger\u00fcstet, um deinen Nutzern schnellere Rails-Anwendungen zu liefern.<\/p>\n<p>Wenn du deine optimierte Rails-Anwendung bereitstellen willst, kannst du die <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Anwenndungs-Hosting<\/a>-Plattform von Kinsta wenden. Mit einem <a href=\"https:\/\/sevalla.com\/pricing\/\">Hobby-Tier<\/a>-Konto kannst du kostenlos loslegen und die Plattform mit diesem <a href=\"https:\/\/docs.sevalla.com\/templates\/overview#ruby-on-rails\">Ruby on Rails-Schnellstart-Beispiel<\/a> erkunden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Caching ist wichtig, um die Leistung und Skalierbarkeit von Webanwendungen zu verbessern &#8211; und Caching in Ruby on Rails ist da keine Ausnahme. Durch das Speichern &#8230;<\/p>\n","protected":false},"author":259,"featured_media":63603,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[990],"class_list":["post-63602","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-webentwicklung-sprachen"],"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>Ruby on Rails Caching: Ein kurzes Tutorial - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Erfahre, wie Ruby on Rails Caching die Leistung und Skalierbarkeit von Anwendungen steigert, indem h\u00e4ufig genutzte Daten effizient gespeichert und wiederverwendet werden.\" \/>\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\/de\/blog\/rails-caching\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruby on Rails Caching: Ein kurzes Tutorial\" \/>\n<meta property=\"og:description\" content=\"Erfahre, wie Ruby on Rails Caching die Leistung und Skalierbarkeit von Anwendungen steigert, indem h\u00e4ufig genutzte Daten effizient gespeichert und wiederverwendet werden.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-10T08:46:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-27T12:56:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/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=\"Erfahre, wie Ruby on Rails Caching die Leistung und Skalierbarkeit von Anwendungen steigert, indem h\u00e4ufig genutzte Daten effizient gespeichert und wiederverwendet werden.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/07\/rails-caching.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Bonisteel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"9\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"Ruby on Rails Caching: Ein kurzes Tutorial\",\"datePublished\":\"2023-07-10T08:46:26+00:00\",\"dateModified\":\"2023-07-27T12:56:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/\"},\"wordCount\":1832,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/07\/rails-caching.jpg\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/\",\"name\":\"Ruby on Rails Caching: Ein kurzes Tutorial - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/07\/rails-caching.jpg\",\"datePublished\":\"2023-07-10T08:46:26+00:00\",\"dateModified\":\"2023-07-27T12:56:23+00:00\",\"description\":\"Erfahre, wie Ruby on Rails Caching die Leistung und Skalierbarkeit von Anwendungen steigert, indem h\u00e4ufig genutzte Daten effizient gespeichert und wiederverwendet werden.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/07\/rails-caching.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/07\/rails-caching.jpg\",\"width\":3043,\"height\":1522},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Web-Entwicklungssprachen\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/webentwicklung-sprachen\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ruby on Rails Caching: Ein kurzes Tutorial\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"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\/de\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\",\"name\":\"Steve Bonisteel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/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\/de\/blog\/author\/stevebonisteel\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ruby on Rails Caching: Ein kurzes Tutorial - Kinsta\u00ae","description":"Erfahre, wie Ruby on Rails Caching die Leistung und Skalierbarkeit von Anwendungen steigert, indem h\u00e4ufig genutzte Daten effizient gespeichert und wiederverwendet werden.","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\/de\/blog\/rails-caching\/","og_locale":"de_DE","og_type":"article","og_title":"Ruby on Rails Caching: Ein kurzes Tutorial","og_description":"Erfahre, wie Ruby on Rails Caching die Leistung und Skalierbarkeit von Anwendungen steigert, indem h\u00e4ufig genutzte Daten effizient gespeichert und wiederverwendet werden.","og_url":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2023-07-10T08:46:26+00:00","article_modified_time":"2023-07-27T12:56:23+00:00","og_image":[{"width":3043,"height":1522,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/07\/rails-caching.jpg","type":"image\/jpeg"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"Erfahre, wie Ruby on Rails Caching die Leistung und Skalierbarkeit von Anwendungen steigert, indem h\u00e4ufig genutzte Daten effizient gespeichert und wiederverwendet werden.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/07\/rails-caching.jpg","twitter_creator":"@Kinsta_DE","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Steve Bonisteel","Gesch\u00e4tzte Lesezeit":"9\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"Ruby on Rails Caching: Ein kurzes Tutorial","datePublished":"2023-07-10T08:46:26+00:00","dateModified":"2023-07-27T12:56:23+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/"},"wordCount":1832,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/07\/rails-caching.jpg","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/rails-caching\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/","url":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/","name":"Ruby on Rails Caching: Ein kurzes Tutorial - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/07\/rails-caching.jpg","datePublished":"2023-07-10T08:46:26+00:00","dateModified":"2023-07-27T12:56:23+00:00","description":"Erfahre, wie Ruby on Rails Caching die Leistung und Skalierbarkeit von Anwendungen steigert, indem h\u00e4ufig genutzte Daten effizient gespeichert und wiederverwendet werden.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/rails-caching\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/07\/rails-caching.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/07\/rails-caching.jpg","width":3043,"height":1522},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/rails-caching\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"Web-Entwicklungssprachen","item":"https:\/\/kinsta.com\/de\/thema\/webentwicklung-sprachen\/"},{"@type":"ListItem","position":3,"name":"Ruby on Rails Caching: Ein kurzes Tutorial"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","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\/de\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f","name":"Steve Bonisteel","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/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\/de\/blog\/author\/stevebonisteel\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/63602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/259"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=63602"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/63602\/revisions"}],"predecessor-version":[{"id":63766,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/63602\/revisions\/63766"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63602\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63602\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63602\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63602\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63602\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63602\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63602\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63602\/translations\/es"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63602\/translations\/dk"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63602\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/63603"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=63602"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=63602"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=63602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}