mcpField
S
solid-cache-coder

solid-cache-coder

github.com/majesticlabs-devDevelopment5049 installsUpdated 7w ago
Repository

About solid-cache-coder

A skill for configuring and maintaining Solid Cache, Rails 8’s database-backed cache store. It guides Rails developers through database setup, cache options, performance tuning, and maintenance.

Key features

  1. 01Separate cache database setup
  2. 02Cache expiration and key design
  3. 03ZSTD compression configuration
  4. 04Batch cache operations
  5. 05Database maintenance guidance

Use cases

  1. 01Setting up Solid Cache in a Rails app
  2. 02Tuning cache storage and expiration
  3. 03Planning cache cleanup tasks

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/majesticlabs-dev/majestic-marketplace --skill solid-cache-coder

After installing, type/solid-cache-coderin Claude Code to confirm it loaded.

Details

From the project README

Solid Cache Coder

Overview

Solid Cache is Rails 8's default cache backend—a database-backed cache store using NVMe storage instead of RAM. It eliminates the need for Redis/Memcached while providing FIFO eviction.

Configuration

Basic Setup
# config/environments/production.rb
config.cache_store = :solid_cache_store
Advanced Configuration
config.cache_store = :solid_cache_store, {
  database: :cache,
  expires_in: 2.weeks,
  size_estimate: 500.megabytes,
  namespace: Rails.env,
  compressor: ZSTDCompressor
}

Database Setup

Separate Cache Database (Recommended)
# config/database.yml
production:
  primary:
    <<: *default
    url: <%= ENV["DATABASE_URL"] %>
  cache:
    <<: *default
    url: <%= ENV["CACHE_DATABASE_URL"] %>
    migrations_paths: db/cache_migrate
Run Migrations
bin/rails solid_cache:install:migrations
bin/rails db:migrate

Cache Key Design

Hierarchical Keys
Rails.cache.fetch("user:#{user.id}:profile:#{profile.id}") { expensive_computation }
Rails.cache.delete_matched("user:#{user.id}:*")  # Pattern-based deletion
Russian Doll Caching
<% cache @post do %>
  <%= @post.body %>
  <% @post.comments.each do |comment| %>
    <% cache comment do %><%= render comment %><% end %>
  <% end %>
<% end %>

Expiration Strategies

# 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 }

Performance Tuning

Enable ZSTD Compression
config.cache_store = :solid_cache_store, { compressor: ZSTDCompressor }
Batch Operations
keys = users.map { |u| "user:#{u.id}:preferences" }
results = Rails.cache.read_multi(*keys)

Rails.cache.fetch_multi(*keys) { |key| compute_value_for(key) }

Database Maintenance

# 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 vs Redis

Choose Solid Cache WhenChoose Redis When
Simplifying infrastructureSub-millisecond latency critical
Using PostgreSQL/SQLite as primaryExtremely large cache working set
Single-server or small clustersNeed pub/sub or complex invalidation
Preferring NVMe over RAM cachingAlready running Redis

Anti-Patterns

Anti-PatternProblemSolution
Single database at scaleResource contentionSeparate cache database
No compressionWasted storageEnable ZSTD
Infinite expirationUnbounded growthSet reasonable max_age
No maintenanceTable bloatSchedule VACUUM

Output Format

When configuring Solid Cache, provide:

  1. Database Setup - Multi-database configuration
  2. Cache Config - Store options and expiration
  3. Performance - Compression and pool settings
  4. Maintenance - Cleanup tasks and schedules

Comments

Markdown supported