solid-cache-coder について
Rails 8 のデータベースベースのキャッシュストア、Solid Cache の設定と保守を支援するスキルです。データベース構成から性能調整、メンテナンスまで扱います。
主な機能
- 01キャッシュ用別データベースの設定
- 02有効期限とキー設計
- 03ZSTD 圧縮の設定
- 04キャッシュの一括操作
- 05データベース保守の案内
活用シーン
- 01Rails アプリで Solid Cache を導入
- 02キャッシュ保存と期限の調整
- 03キャッシュ清掃タスクの計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ majesticlabs-dev/ majestic-marketplace --skill solid-cache-coderインストール後、Claude Code で/solid-cache-coderを入力して読み込まれたか確認します。
詳細
Solid Cache コーダー
概要
Solid Cache は Rails 8 のデフォルトのキャッシュバックエンドです。RAM の代わりに NVMe ストレージを使用する、データベースベースのキャッシュストアです。FIFO による削除機能を備え、Redis/Memcached を不要にします。
設定
基本設定
# config/environments/production.rb
config.cache_store = :solid_cache_store
詳細設定
config.cache_store = :solid_cache_store, {
database: :cache,
expires_in: 2.weeks,
size_estimate: 500.megabytes,
namespace: Rails.env,
compressor: ZSTDCompressor
}
データベースのセットアップ
キャッシュ専用データベース(推奨)
# config/database.yml
production:
primary:
<<: *default
url: <%= ENV["DATABASE_URL"] %>
cache:
<<: *default
url: <%= ENV["CACHE_DATABASE_URL"] %>
migrations_paths: db/cache_migrate
マイグレーションを実行する
bin/rails solid_cache:install:migrations
bin/rails db:migrate
キャッシュキーの設計
階層型キー
Rails.cache.fetch("user:#{user.id}:profile:#{profile.id}") { expensive_computation }
Rails.cache.delete_matched("user:#{user.id}:*") # Pattern-based deletion
ロシア人形キャッシュ
<% cache @post do %>
<%= @post.body %>
<% @post.comments.each do |comment| %>
<% cache comment do %><%= render comment %><% end %>
<% end %>
<% end %>
有効期限の戦略
# Per-entry expiration
Rails.cache.write("session:#{id}", data, expires_in: 30.minutes)
# Fetch with expiration
Rails.cache.fetch("expensive_query", expires_in: 15.minutes) { ExpensiveQuery.run }
パフォーマンスの調整
ZSTD 圧縮を有効にする
config.cache_store = :solid_cache_store, { compressor: ZSTDCompressor }
バッチ処理
keys = users.map { |u| "user:#{u.id}:preferences" }
results = Rails.cache.read_multi(*keys)
Rails.cache.fetch_multi(*keys) { |key| compute_value_for(key) }
データベースのメンテナンス
# lib/tasks/cache_maintenance.rake
namespace :cache do
task vacuum: :environment do
ActiveRecord::Base.connected_to(database: :cache) do
ActiveRecord::Base.connection.execute("VACUUM ANALYZE solid_cache_entries")
end
end
end
Solid Cache と Redis の比較
| Solid Cache を選ぶ場合 | Redis を選ぶ場合 |
|---|---|
| インフラストラクチャを簡素化したい | 1 ミリ秒未満のレイテンシが重要 |
| PostgreSQL/SQLite をプライマリとして使用している | 非常に大規模なキャッシュワーキングセットがある |
| 単一サーバーまたは小規模クラスターを使用している | Pub/Sub や複雑な無効化が必要 |
| RAM キャッシュより NVMe を優先する | すでに Redis を実行している |
アンチパターン
| アンチパターン | 問題 | 解決策 |
|---|---|---|
| 大規模環境で単一のデータベースを使用する | リソースの競合 | キャッシュ専用データベースを使用する |
| 圧縮しない | ストレージの無駄 | ZSTD を有効にする |
| 有効期限を設定しない | 無制限に増大する | 適切な max_age を設定する |
| メンテナンスを行わない | テーブルの肥大化 | VACUUM をスケジュールする |
出力形式
Solid Cache を設定する際は、以下を提示してください。
- データベースのセットアップ - マルチデータベース設定
- キャッシュ設定 - ストアのオプションと有効期限
- パフォーマンス - 圧縮とプールの設定
- メンテナンス - クリーンアップタスクとスケジュール
コメント
Markdown 対応