Caching in Ruby on Rails 7
Tags: ruby, rails, webdev, beginners
Published: 2023-02-25 10:39:06

Caching is an essential technique used to improve the performance of web applications. It helps reduce the time taken to load and serve data by storing frequently accessed data in a fast and easily accessible storage medium, like memory and disk. 

In Ruby on Rails, caching is easier than ever to implement and can have a significant impact on the performance of your web application.

In this article, we will explore caching in Ruby on Rails 7 and why it's important.

---


## Why is Caching Important?

Caching is important because it allows you to avoid performing expensive operations repeatedly. 

For example, if you have a page that displays a list of the **top 10** most popular products on your website, you may need to query your database to retrieve this data. Without caching, this query would be executed **every time** the page is loaded, which could **slow down** page load times and put unnecessary strain on your server.

---

## Types of Caching in Ruby on Rails

<p>
  <br />
  <strong id="page-caching"> 1. Page Caching </strong>
</p>

Page caching is the simplest form of caching in Rails. It involves caching an entire page as an HTML file, which is served to **subsequent users** who request the same page.

It allows the request for a generated page, to be fulfilled by the web server _(i.e. Apache or NGINX)_ without having to go through the entire Rails stack.

This is ideal for pages that are mostly static and do not change frequently.

> A **subsequent user** is a user who visits a website after the initial user has already visited it.

**2. Action Caching**

[Page Caching](#page-caching) cannot be used for actions that have before filters. For example, pages that require authentication.

This is where Action Caching comes in.

Action caching is similar to page caching, but instead of caching the entire page, only the action (i.e., the controller method) is cached. It works like **Page Caching** except the incoming web request hits the Rails stack, so that before filters can be run on it before the cache is served.

**3. Fragment Caching**

Fragment caching involves caching a small part of a page, such as a sidebar or a comment section. This is useful for pages that have some dynamic content but also contain mostly static content.

For example, if you wanted to cache each product on a page, you could use this code:

```
<% @products.each do |product| %>
  <% cache product do %>
    <%= render product %>
  <% end %>
<% end %>
```

When your application receives its first request to this page, Rails will write a new cache entry with a unique key. A key looks something like this:

```
views/products/index:bea67108094918eeba42cd4a6e786901/products/1
```

**4. Low-Level Caching**

Low-level caching is a more advanced form of caching that allows you to cache any data that can be represented as an object. This can include data from your database or external APIs.

Low-level caching is basically dealing with key-value-based caching structures. This is a very commonly used caching type in which the key can be read or written as below:

```
Rails.cache.write('some-cache-key', 123)
Rails.cache.read('some-cache-key') # => 123
Rails.cache.read('anonymous-cache-key') # => nil
```

---

### Conclusion

Caching is a powerful technique that can significantly improve the performance of your Ruby on Rails application. By understanding the different types of caching available and how to implement them, you can create a faster and more responsive user experience for your users.