Active Model Serializerのデータをredisにキャッシュする

公開日時

active_model_serializersで出力しているAPIレスポンスをRedisにキャッシュしたかったの対応した。

Rails 5.2から公式でRedisのキャッシュストアが対応されたとのことなのでキャッシュの導入は非常に手軽。

まずはGemfileにredisとhiredisを追加する。

# Gemfile

gem 'redis'
gem 'hiredis'

config/environments/xxxのcache_storeをredisに変更する。

# config/environments/production.rb

config.cache_store = :redis_cache_store, { url: "redis://#{ENV.fetch('REDIS_HOST') { 'localhost' }}:#{ENV.fetch('REDIS_PORT') { '6379' }}/#{ENV.fetch('REDIS_DB') { '1' }}" }

これでキャッシュストアにredisが使えるようになった。

active_model_serializersの出力をキャッシュするには↓のようにrender_to_stringを使う。

class PostsController < ApplicationController
  def index
    posts = cached_posts_json
    render json: json
  end
  
  private
  
  def cached_posts_json
    Rails.cache.fetch("posts", expires_in: 5.minutes) do
      posts = Post.all
      render_to_string json: posts
    end
  end
end

これでpostsを5分間redisにキャッシュできるようになった。

参考


Related #ruby

VSCode + PrettierでRubyのコードを自動フォーマットする

@prettier/plugin-rubyを利用

VSCodeでRails環境を整える

ショートカット大事

VSCodeでRubyのコード補完と関数ジャンプができるようにする

ruby拡張とsolargraph拡張を入れる

Action Mailerのインターセプタを使ってバウンスメールのチェックを行う

AWS SESを使っている場合はバウンス対応をやっておかないとサービス停止になってしまう

wsl2上のUbuntuにrubyの開発環境を構築する

久しぶりに手動構築した