{"id":67842,"date":"2023-07-10T10:46:30","date_gmt":"2023-07-10T08:46:30","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=67842&#038;preview=true&#038;preview_id=67842"},"modified":"2025-01-17T13:46:55","modified_gmt":"2025-01-17T12:46:55","slug":"cache-rails","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/","title":{"rendered":"Cach\u00e9 en Ruby on Rails: Tutorial R\u00e1pido"},"content":{"rendered":"<p>El almacenamiento en cach\u00e9 es esencial para mejorar el rendimiento y la escalabilidad de las aplicaciones web, y el almacenamiento en cach\u00e9 en <a href=\"https:\/\/kinsta.com\/es\/blog\/ruby-on-rails-vs-node-js\/#what-is-ruby-on-rails\">Ruby on Rails<\/a> no es una excepci\u00f3n. Al almacenar y reutilizar los resultados de c\u00e1lculos costosos o consultas a bases de datos, el almacenamiento en cach\u00e9 reduce significativamente el tiempo y los recursos necesarios para atender las peticiones de los usuarios.<\/p>\n<p>Aqu\u00ed repasamos c\u00f3mo implementar distintos tipos de almacenamiento en cach\u00e9 en Rails, como el almacenamiento en cach\u00e9 de fragmentos y el almacenamiento en cach\u00e9 de mu\u00f1ecas rusas. Tambi\u00e9n te mostramos c\u00f3mo gestionar las dependencias de la cach\u00e9 y elegir los almacenes de cach\u00e9, y detallamos las mejores pr\u00e1cticas para utilizar la cach\u00e9 de forma eficaz en una aplicaci\u00f3n Rails.<\/p>\n<p>Este art\u00edculo asume que est\u00e1s familiarizado con Ruby on Rails, que utilizas la versi\u00f3n 6 o superior de Rails y que te sientes c\u00f3modo utilizando las <a href=\"https:\/\/guides.rubyonrails.org\/action_view_overview.html\" target=\"_blank\" rel=\"noopener noreferrer\">vistas de Rails<\/a>. Los ejemplos de c\u00f3digo demuestran c\u00f3mo utilizar el almacenamiento en cach\u00e9 dentro de plantillas de vistas nuevas o existentes.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Tipos de Almacenamiento en Cach\u00e9 de Ruby on Rails<\/h2>\n<p>Existen varios tipos de almacenamiento en cach\u00e9 en las aplicaciones Ruby on Rails, dependiendo del nivel y la granularidad del contenido a almacenar en cach\u00e9. Los principales tipos utilizados en las aplicaciones Rails modernas son:<\/p>\n<ul>\n<li><strong>Almacenamiento en cach\u00e9 de fragmentos<\/strong>: Almacena en cach\u00e9 partes de una p\u00e1gina web que no cambian con frecuencia, como cabeceras, pies de p\u00e1gina, barras laterales o contenido est\u00e1tico. La cach\u00e9 de fragmentos reduce el n\u00famero de parciales o componentes renderizados en cada petici\u00f3n.<\/li>\n<li><strong>Cach\u00e9 de mu\u00f1ecas rusas<\/strong>: Almacena en cach\u00e9 fragmentos anidados de una p\u00e1gina web que dependen unos de otros, como colecciones y asociaciones. La cach\u00e9 de mu\u00f1ecas rusas evita consultas innecesarias a la base de datos y facilita la reutilizaci\u00f3n de fragmentos almacenados en cach\u00e9 sin modificar.<\/li>\n<\/ul>\n<p>Anteriormente, Ruby on Rails inclu\u00eda dos tipos adicionales de cach\u00e9, pero ahora est\u00e1n disponibles como objetos independientes:<\/p>\n<ul>\n<li><strong>Almacenamiento en cach\u00e9 de p\u00e1ginas:<\/strong> Almacena en cach\u00e9 p\u00e1ginas web enteras como archivos est\u00e1ticos en el servidor, evitando todo el ciclo de vida de renderizaci\u00f3n de la p\u00e1gina<\/li>\n<li><strong>Almacenamiento en cach\u00e9 de acciones<\/strong>: Almacena en cach\u00e9 la salida de acciones de controlador completas. Es similar a la cach\u00e9 de p\u00e1gina, pero te permite aplicar filtros como la autenticaci\u00f3n.<\/li>\n<\/ul>\n<p>El almacenamiento en cach\u00e9 de p\u00e1ginas y acciones se utiliza con poca frecuencia y ya no se recomienda para la mayor\u00eda de los casos de uso en las aplicaciones Rails modernas.<\/p>\n<h2>Cach\u00e9 de Fragmentos en Ruby on Rails<\/h2>\n<p>El almacenamiento en cach\u00e9 de fragmentos te permite almacenar en cach\u00e9 partes de una p\u00e1gina que cambian con poca frecuencia. Por ejemplo, una p\u00e1gina que muestre una lista de productos con sus precios y valoraciones asociados podr\u00eda almacenar en cach\u00e9 detalles que es poco probable que cambien.<\/p>\n<p>Mientras tanto, podr\u00eda permitir a Rails volver a renderizar partes din\u00e1micas de la p\u00e1gina \u2014 como comentarios o valoraciones \u2014 en cada carga de la p\u00e1gina. La cach\u00e9 de fragmentos es menos \u00fatil cuando los datos subyacentes de una vista cambian con frecuencia, debido a la sobrecarga que supone actualizar frecuentemente la cach\u00e9.<\/p>\n<p>Al ser el tipo de cach\u00e9 m\u00e1s sencillo incluido en Rails, la cach\u00e9 de fragmentos deber\u00eda ser tu primera opci\u00f3n cuando a\u00f1adas cach\u00e9 a tu aplicaci\u00f3n para mejorar el rendimiento.<\/p>\n<p>Para utilizar la cach\u00e9 de fragmentos en Rails, utiliza el <a href=\"https:\/\/api.rubyonrails.org\/v6.1.0\/classes\/ActionView\/Helpers\/CacheHelper.html\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9todo auxiliar<\/a> de <code>cache<\/code> en tus vistas. Por ejemplo, escribe el siguiente c\u00f3digo para almacenar en cach\u00e9 un parcial de producto en tu 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>El m\u00e9todo auxiliar de <code>cache<\/code> genera una clave de cach\u00e9 basada en el nombre de clase de cada elemento, <code>id<\/code>, y la marca de tiempo <code>updated_at<\/code> (por ejemplo, <code>products\/1-20230501000000<\/code>). La pr\u00f3xima vez que un usuario solicite el mismo producto, el m\u00e9todo auxiliar de <code>cache<\/code> recuperar\u00e1 el fragmento en cach\u00e9 del almac\u00e9n de cach\u00e9 y lo mostrar\u00e1 sin leer el producto de la base de datos.<\/p>\n<p>Tambi\u00e9n puedes personalizar la clave de cach\u00e9 pasando opciones al m\u00e9todo auxiliar de <code>cache<\/code>. Por ejemplo, para incluir un n\u00famero de versi\u00f3n o una marca de tiempo en tu clave de cach\u00e9, escribe algo como esto<\/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>Alternativamente, puedes establecer un tiempo de caducidad:<\/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>El primer ejemplo a\u00f1adir\u00e1 <code>v1<\/code> a la clave de la cach\u00e9 (por ejemplo, <code>products\/1-v1<\/code>). Esto es \u00fatil para invalidar la cach\u00e9 cuando cambies la plantilla parcial o el dise\u00f1o. El segundo ejemplo establece un tiempo de caducidad para la entrada de la cach\u00e9 (1 hora), lo que ayuda a caducar los datos obsoletos.<\/p>\n<h2>Cach\u00e9 de Mu\u00f1ecas Rusas en Ruby on Rails<\/h2>\n<p>La cach\u00e9 de mu\u00f1ecas rusas es una potente estrategia de cach\u00e9 en Ruby on Rails que optimiza el rendimiento de tu aplicaci\u00f3n anidando cach\u00e9s unas dentro de otras. Utiliza la cach\u00e9 de fragmentos de Rails y las dependencias de cach\u00e9 para minimizar el trabajo redundante y mejorar los tiempos de carga.<\/p>\n<p>En una aplicaci\u00f3n Rails t\u00edpica, a menudo renderizas una colecci\u00f3n de elementos, cada uno con m\u00faltiples componentes hijos. Al actualizar un \u00fanico elemento, evita volver a renderizar toda la colecci\u00f3n o cualquier elemento no afectado. Utiliza la cach\u00e9 de Mu\u00f1ecas Rusas cuando trabajes con estructuras de datos jer\u00e1rquicas o anidadas, especialmente cuando los componentes anidados tengan sus propios datos asociados que podr\u00edan cambiar independientemente.<\/p>\n<p>El inconveniente de la cach\u00e9 de Mu\u00f1ecas Rusas es que a\u00f1ade complejidad. Debes comprender las relaciones entre los niveles anidados de elementos que est\u00e1s almacenando en cach\u00e9 para asegurarte de que almacenas en cach\u00e9 los elementos correctos. En algunos casos, tendr\u00e1s que a\u00f1adir asociaciones a tus modelos <a href=\"https:\/\/guides.rubyonrails.org\/active_record_basics.html\" target=\"_blank\" rel=\"noopener noreferrer\">Active Record<\/a> para que Rails pueda inferir las relaciones entre los elementos de datos almacenados en cach\u00e9.<\/p>\n<p>Al igual que con la cach\u00e9 de fragmentos normal, la cach\u00e9 de mu\u00f1ecas rusas utiliza el m\u00e9todo auxiliar de <code>cache<\/code>. Por ejemplo, para almacenar en cach\u00e9 una categor\u00eda con sus subcategor\u00edas y productos en tu vista, escribe algo como esto<\/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>El m\u00e9todo auxiliar de <code>cache<\/code> almacenar\u00e1 cada nivel anidado por separado en el almac\u00e9n de cach\u00e9. La pr\u00f3xima vez que se solicite la misma categor\u00eda, recuperar\u00e1 su fragmento en cach\u00e9 del almac\u00e9n de cach\u00e9 y lo mostrar\u00e1 sin renderizarlo de nuevo.<\/p>\n<p>Sin embargo, si cambian los detalles de alguna subcategor\u00eda o producto\u00a0 \u2014 como su nombre o descripci\u00f3n \u2014 se invalida su fragmento en cach\u00e9, que se vuelve a renderizar con los datos actualizados. El almacenamiento en cach\u00e9 de mu\u00f1ecas rusas garantiza que no tengas que invalidar toda una categor\u00eda si cambia una sola subcategor\u00eda o producto.<\/p>\n<h2>Gesti\u00f3n de Dependencias de Cach\u00e9 en Ruby on Rails<\/h2>\n<p>Las dependencias de cach\u00e9 son relaciones entre los datos almacenados en cach\u00e9 y sus fuentes subyacentes, y gestionarlas puede ser complicado. Si los datos de origen cambian, cualquier dato almacenado en cach\u00e9 asociado debe caducar.<\/p>\n<p>Rails puede utilizar marcas de tiempo para gestionar autom\u00e1ticamente la mayor\u00eda de las dependencias de cach\u00e9. Cada modelo de Registro Activo tiene atributos <code>created_at<\/code> y <code>updated_at<\/code> que indican cu\u00e1ndo la cach\u00e9 cre\u00f3 o actualiz\u00f3 por \u00faltima vez el registro. Para asegurarte de que Rails puede gestionar autom\u00e1ticamente el almacenamiento en cach\u00e9, define las relaciones de tus modelos de Registro Activo como sigue:<\/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>En este ejemplo<\/p>\n<ul>\n<li>Si actualizas un registro de producto (por ejemplo, cambiando su precio), su marca de tiempo <code>updated_at<\/code> cambia autom\u00e1ticamente.<\/li>\n<li>Si utilizas esta marca de tiempo como parte de tu clave de cach\u00e9 (como <code> products\/1-20230504000000<\/code>), tambi\u00e9n se invalida autom\u00e1ticamente su fragmento en cach\u00e9.<\/li>\n<li>Para invalidar el fragmento almacenado en cach\u00e9 de tu categor\u00eda cuando actualices un registro de producto \u2014 quiz\u00e1s porque muestra algunos datos agregados como el precio medio \u2014 utiliza el m\u00e9todo <code>touch<\/code> en tu controlador (<code>@product.category.touch<\/code>) o a\u00f1ade una opci\u00f3n <code>touch<\/code> en tu asociaci\u00f3n modelo (<code>belongs_to :category touch: true<\/code>).<\/li>\n<\/ul>\n<p>Otro mecanismo para gestionar las dependencias de la cach\u00e9 es utilizar m\u00e9todos de cach\u00e9 de bajo nivel -como <code>fetch<\/code> y <code>write<\/code> \u2014 directamente en tus modelos o controladores. Estos m\u00e9todos te permiten almacenar datos o contenidos arbitrarios en tu almac\u00e9n de cach\u00e9 con claves y opciones personalizadas. Por ejemplo<\/p>\n<pre><code class=\"language-js\">class Product &lt; ApplicationRecord\n  def self.average_price\n    Rails.cache.fetch(\"products\/average_price\", expires_in: 1.hour) do\n    average(:price)\n    end\n  end\nend<\/code><\/pre>\n<p>Este ejemplo muestra c\u00f3mo almacenar en cach\u00e9 datos calculados \u2014 como el precio medio de todos los productos \u2014 durante una hora utilizando el m\u00e9todo <code>fetch<\/code> con una clave personalizada (<code>products\/average_price<\/code>) y una opci\u00f3n de caducidad (<code>expires_in: 1.hour<\/code>).<\/p>\n<p>El m\u00e9todo <code>fetch<\/code> intentar\u00e1 leer primero los datos del almac\u00e9n cach\u00e9. Si no encuentra los datos o \u00e9stos han caducado, ejecuta el bloque y almacena el resultado en el almac\u00e9n cach\u00e9.<\/p>\n<p>Para invalidar manualmente una entrada de la cach\u00e9 antes de su tiempo de caducidad, utiliza el m\u00e9todo <code>write<\/code> con la opci\u00f3n <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>Almacenes de Cach\u00e9 y Backends en Ruby on Rails<\/h2>\n<p>Rails te permite elegir diferentes almacenes de cach\u00e9 o backends para guardar tus datos y contenidos en cach\u00e9. El almac\u00e9n de cach\u00e9 de Rails es una capa de abstracci\u00f3n que proporciona una interfaz com\u00fan para interactuar con diferentes sistemas de almacenamiento. Un backend de cach\u00e9 implementa la interfaz del almac\u00e9n de cach\u00e9 para un sistema de almacenamiento espec\u00edfico.<\/p>\n<p>Rails admite varios tipos de almacenes de cach\u00e9 o backends, que se detallan a continuaci\u00f3n.<\/p>\n<h3>Almac\u00e9n de Memoria<\/h3>\n<p>El almac\u00e9n de memoria utiliza un hash en memoria como almacenamiento cach\u00e9. Es r\u00e1pido y sencillo, pero tiene capacidad y persistencia limitadas. Este almac\u00e9n de cach\u00e9 es adecuado para entornos de desarrollo y pruebas o para aplicaciones peque\u00f1as y sencillas.<\/p>\n<h3>Almacenamiento en Disco<\/h3>\n<p>El almacenamiento en disco utiliza archivos del disco como almacenamiento en cach\u00e9. Es la opci\u00f3n de almacenamiento en cach\u00e9 m\u00e1s lenta de Rails, pero tiene una gran capacidad y persistencia. El almacenamiento en disco es adecuado para aplicaciones que deben almacenar en cach\u00e9 grandes cantidades de datos y no necesitan el m\u00e1ximo rendimiento.<\/p>\n<h3>Redis<\/h3>\n<p>El almac\u00e9n Redis utiliza una instancia de <a href=\"https:\/\/kinsta.com\/es\/blog\/redis-vs-mongodb\/#redis-with-kinsta\">Redis<\/a> para el almacenamiento en cach\u00e9. Redis es un almac\u00e9n de datos en memoria que admite varios tipos de datos. Aunque es r\u00e1pido y flexible, requiere un servidor y una configuraci\u00f3n independientes. Es adecuado para aplicaciones que deben almacenar en cach\u00e9 datos complejos o din\u00e1micos que cambian con frecuencia. Redis es una opci\u00f3n ideal cuando se ejecutan aplicaciones Rails en la nube porque algunos proveedores de alojamiento, incluido Kinsta, ofrecen <a href=\"https:\/\/kinsta.com\/es\/docs\/alojamiento-wordpress\/cache\/cache-redis\/\">Redis como cach\u00e9 de objetos persistente<\/a>.<\/p>\n<h3>Memcached<\/h3>\n<p>El almac\u00e9n Memcached utiliza una instancia de <a href=\"https:\/\/kinsta.com\/es\/blog\/memcached-vs-redis\/\">Memcached<\/a> para el almacenamiento en cach\u00e9. Memcached es un almac\u00e9n clave-valor en memoria que admite tipos de datos y funciones sencillas. Es r\u00e1pido y escalable, pero al igual que Redis, requiere un servidor y una configuraci\u00f3n independientes. Este almac\u00e9n es adecuado para aplicaciones que necesitan almacenar en cach\u00e9 datos simples o est\u00e1ticos que se actualizan con frecuencia.<\/p>\n<p>Puedes configurar tu almac\u00e9n cach\u00e9 en tus archivos de entornos Rails (por ejemplo, <strong>config\/environments\/development.rb<\/strong>) utilizando la opci\u00f3n <code>config.cache_store<\/code>. A continuaci\u00f3n te explicamos c\u00f3mo utilizar cada uno de los m\u00e9todos de almacenamiento en cach\u00e9 incorporados en 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>S\u00f3lo debes tener una llamada a <code>config.cache_store<\/code> por archivo de entorno. Si tienes m\u00e1s de una, el almac\u00e9n de cach\u00e9 s\u00f3lo utiliza la \u00faltima.<\/p>\n<p>Cada almac\u00e9n de cach\u00e9 tiene ventajas y desventajas \u00fanicas en funci\u00f3n de las necesidades y preferencias de tu aplicaci\u00f3n. Elige el que mejor se adapte a tu caso de uso y a tu nivel de experiencia.<\/p>\n<h2>Buenas Pr\u00e1cticas para el Almacenamiento en Cach\u00e9 de Ruby on Rails<\/h2>\n<p>Utilizar el almacenamiento en cach\u00e9 en tu aplicaci\u00f3n Rails puede aumentar significativamente su rendimiento y escalabilidad, especialmente cuando implementas las siguientes buenas pr\u00e1cticas:<\/p>\n<ul>\n<li><strong>Almacena en cach\u00e9 de forma selectiva<\/strong>: Almacena en cach\u00e9 s\u00f3lo los datos a los que se accede con frecuencia, los que son caros de generar o los que se actualizan con poca frecuencia. Evita el exceso de cach\u00e9 para evitar el uso excesivo de memoria, los riesgos de datos obsoletos y la degradaci\u00f3n del rendimiento.<\/li>\n<li><strong>Expirar entradas de cach\u00e9<\/strong>: Evita que los datos caduquen expirando las entradas inv\u00e1lidas o irrelevantes. Utiliza marcas de tiempo, opciones de caducidad o invalidaci\u00f3n manual.<\/li>\n<li><strong>Optimiza el rendimiento de la cach\u00e9<\/strong>: Elige el almac\u00e9n de cach\u00e9 que se ajuste a las necesidades de tu aplicaci\u00f3n, y ajusta sus par\u00e1metros \u2014 como el tama\u00f1o, la compresi\u00f3n o la serializaci\u00f3n \u2014 para obtener un rendimiento \u00f3ptimo.<\/li>\n<li><strong>Supervisa y comprueba el impacto de la cach\u00e9<\/strong>: Eval\u00faa el comportamiento de la cach\u00e9 \u2014 como la tasa de aciertos, la tasa de fallos y la latencia \u2014 y valora sus respectivos impactos en el rendimiento (tiempo de respuesta, rendimiento, uso de recursos). Utiliza herramientas como <a href=\"https:\/\/kinsta.com\/es\/docs\/alojamiento-wordpress\/monitorizacion-wordpress\/seguimiento-personalizado-new-relic\/\">New Relic<\/a>, <a href=\"https:\/\/guides.rubyonrails.org\/debugging_rails_applications.html#the-logger\" target=\"_blank\" rel=\"noopener noreferrer\">Rails logs<\/a>,\u00a0<a href=\"https:\/\/api.rubyonrails.org\/classes\/ActiveSupport\/Notifications.html\" target=\"_blank\" rel=\"noopener noreferrer\">ActiveSupport notifications<\/a>\u00a0o\u00a0<a href=\"https:\/\/github.com\/MiniProfiler\/rack-mini-profiler\" target=\"_blank\" rel=\"noopener noreferrer\">Rack mini profiler<\/a><\/li>\n<\/ul>\n<h2>Resumen<\/h2>\n<p>El almacenamiento en cach\u00e9 de Ruby on Rails mejora el rendimiento y la escalabilidad de las aplicaciones al almacenar y reutilizar de forma eficiente los datos o contenidos a los que se accede con frecuencia. Con un conocimiento m\u00e1s profundo de las t\u00e9cnicas de almacenamiento en cach\u00e9, estar\u00e1s mejor equipado para ofrecer aplicaciones Rails m\u00e1s r\u00e1pidas a tus usuarios.<\/p>\n<p>Cuando despliegues tu aplicaci\u00f3n Rails optimizada, puedes recurrir a la plataforma de <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Alojamiento de Aplicaciones<\/a> de Kinsta. Empieza gratis con una cuenta <a href=\"https:\/\/sevalla.com\/pricing\/\">Hobby Tier<\/a> y explora la plataforma con este <a href=\"https:\/\/docs.sevalla.com\/templates\/overview#ruby-on-rails\">ejemplo de inicio r\u00e1pido de Ruby on Rails<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El almacenamiento en cach\u00e9 es esencial para mejorar el rendimiento y la escalabilidad de las aplicaciones web, y el almacenamiento en cach\u00e9 en Ruby on Rails &#8230;<\/p>\n","protected":false},"author":259,"featured_media":67843,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1336],"class_list":["post-67842","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-lenguajes-desarrollo-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>Cach\u00e9 en Ruby on Rails: Tutorial R\u00e1pido - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Aprende c\u00f3mo el almacenamiento en cach\u00e9 de Ruby on Rails mejora el rendimiento y la escalabilidad de las aplicaciones almacenando y reutilizando de forma eficiente los datos a los que se accede con m\u00e1s frecuencia.\" \/>\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\/es\/blog\/cache-rails\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cach\u00e9 en Ruby on Rails: Tutorial R\u00e1pido\" \/>\n<meta property=\"og:description\" content=\"Aprende c\u00f3mo el almacenamiento en cach\u00e9 de Ruby on Rails mejora el rendimiento y la escalabilidad de las aplicaciones almacenando y reutilizando de forma eficiente los datos a los que se accede con m\u00e1s frecuencia.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-10T08:46:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-17T12:46:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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=\"Aprende c\u00f3mo el almacenamiento en cach\u00e9 de Ruby on Rails mejora el rendimiento y la escalabilidad de las aplicaciones almacenando y reutilizando de forma eficiente los datos a los que se accede con m\u00e1s frecuencia.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/07\/rails-caching.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Bonisteel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"Cach\u00e9 en Ruby on Rails: Tutorial R\u00e1pido\",\"datePublished\":\"2023-07-10T08:46:30+00:00\",\"dateModified\":\"2025-01-17T12:46:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/\"},\"wordCount\":2277,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/07\/rails-caching.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/\",\"name\":\"Cach\u00e9 en Ruby on Rails: Tutorial R\u00e1pido - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/07\/rails-caching.jpg\",\"datePublished\":\"2023-07-10T08:46:30+00:00\",\"dateModified\":\"2025-01-17T12:46:55+00:00\",\"description\":\"Aprende c\u00f3mo el almacenamiento en cach\u00e9 de Ruby on Rails mejora el rendimiento y la escalabilidad de las aplicaciones almacenando y reutilizando de forma eficiente los datos a los que se accede con m\u00e1s frecuencia.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/07\/rails-caching.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/07\/rails-caching.jpg\",\"width\":3043,\"height\":1522},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lenguajes de Desarrollo Web\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/lenguajes-desarrollo-web\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cach\u00e9 en Ruby on Rails: Tutorial R\u00e1pido\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"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\/es\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\",\"name\":\"Steve Bonisteel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/stevebonisteel\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Cach\u00e9 en Ruby on Rails: Tutorial R\u00e1pido - Kinsta\u00ae","description":"Aprende c\u00f3mo el almacenamiento en cach\u00e9 de Ruby on Rails mejora el rendimiento y la escalabilidad de las aplicaciones almacenando y reutilizando de forma eficiente los datos a los que se accede con m\u00e1s frecuencia.","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\/es\/blog\/cache-rails\/","og_locale":"es_ES","og_type":"article","og_title":"Cach\u00e9 en Ruby on Rails: Tutorial R\u00e1pido","og_description":"Aprende c\u00f3mo el almacenamiento en cach\u00e9 de Ruby on Rails mejora el rendimiento y la escalabilidad de las aplicaciones almacenando y reutilizando de forma eficiente los datos a los que se accede con m\u00e1s frecuencia.","og_url":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-07-10T08:46:30+00:00","article_modified_time":"2025-01-17T12:46:55+00:00","og_image":[{"width":3043,"height":1522,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/07\/rails-caching.jpg","type":"image\/jpeg"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"Aprende c\u00f3mo el almacenamiento en cach\u00e9 de Ruby on Rails mejora el rendimiento y la escalabilidad de las aplicaciones almacenando y reutilizando de forma eficiente los datos a los que se accede con m\u00e1s frecuencia.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/07\/rails-caching.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Steve Bonisteel","Tiempo de lectura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"Cach\u00e9 en Ruby on Rails: Tutorial R\u00e1pido","datePublished":"2023-07-10T08:46:30+00:00","dateModified":"2025-01-17T12:46:55+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/"},"wordCount":2277,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/07\/rails-caching.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/cache-rails\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/","url":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/","name":"Cach\u00e9 en Ruby on Rails: Tutorial R\u00e1pido - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/07\/rails-caching.jpg","datePublished":"2023-07-10T08:46:30+00:00","dateModified":"2025-01-17T12:46:55+00:00","description":"Aprende c\u00f3mo el almacenamiento en cach\u00e9 de Ruby on Rails mejora el rendimiento y la escalabilidad de las aplicaciones almacenando y reutilizando de forma eficiente los datos a los que se accede con m\u00e1s frecuencia.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/cache-rails\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/07\/rails-caching.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/07\/rails-caching.jpg","width":3043,"height":1522},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/cache-rails\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Lenguajes de Desarrollo Web","item":"https:\/\/kinsta.com\/es\/secciones\/lenguajes-desarrollo-web\/"},{"@type":"ListItem","position":3,"name":"Cach\u00e9 en Ruby on Rails: Tutorial R\u00e1pido"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","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\/es\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f","name":"Steve Bonisteel","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/stevebonisteel\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/67842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/259"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=67842"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/67842\/revisions"}],"predecessor-version":[{"id":68022,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/67842\/revisions\/68022"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67842\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67842\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67842\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67842\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67842\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67842\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67842\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67842\/translations\/es"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67842\/translations\/dk"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67842\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/67843"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=67842"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=67842"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=67842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}