Solid Cache(Rails)
Redisの代わりにSSD — データベース基盤Railsキャッシュストア
GitHub: rails/solid_cache
Solid Cacheは37signalsが作ったDB基盤のキャッシュストアです。「メモリ(RAM)は高く、SSDは安い」というシンプルな観察から出発しています。Redisのメモリ制限(数GB)の代わりにSSD(数TB)を活用すれば、はるかに大きなキャッシュをはるかに安価に運用できます。
詳細なアーキテクチャ分析については韓国語版を参照してください。キャッシュエントリをDBテーブルの行として保存するコアアイデア、solid_cache_entriesスキーマ、キャッシュ読み書き操作、書き込み頻度に比例した確率的期限切れメカニズム(EXPIRY_MULTIPLIER = 2)、シャーディングのためのMaglev一貫ハッシュ、設定オプション、Redis vs Solid Cache比較が含まれます。
トレードオフ: 若干遅い(msレベル)が、はるかに大きなキャッシュをはるかに安価に運用できます。ほとんどのRailsアプリでこの差は体感されません。
構造ダイアグラム
キャッシュ保存構造
キャッシュ読み書きフロー
期限切れメカニズム (TTLではなく確率的期限切れ)
Redis vs Solid Cache
シャーディング (Maglev Consistent Hashing)
キーポイント
GitHubでrails/solid_cacheリポジトリを開く
app/models/solid_cache/entry.rb → キャッシュエントリモデルを分析
app/models/solid_cache/entry/expiration.rb → 期限切れロジックを分析
lib/solid_cache/store.rb → ActiveSupport::Cache::Storeサブクラス構造
lib/solid_cache/store/expiry.rb → 書き込み基盤の確率的期限切れトリガー
lib/solid_cache/maglev_hash.rb → 一貫ハッシュ実装を分析
lib/solid_cache/connections/ → 単一DB vs シャーディング接続管理
db/migrate/ → solid_cache_entriesテーブルスキーマを確認
メリット
- ✓ Redis不要 — 運用インフラの簡素化
- ✓ SSD活用 — RAMよりはるかに大きなキャッシュが可能
- ✓ ActiveSupport互換 — Rails.cache APIをそのまま使用
- ✓ 別途設定なしでRails 8でデフォルト動作
- ✓ Maglevハッシュ — 優雅なシャーディングサポート
- ✓ 暗号化サポート — ActiveRecord Encryptionを活用
デメリット
- ✗ Redisより遅い(RAM ~0.1ms vs SSD ~1-5ms)
- ✗ DB負荷増加 — 別途キャッシュDB推奨
- ✗ 確率的期限切れ — TTLのような正確な期限切れ時点を保証しない
- ✗ 高性能リアルタイムシステムにはRedisが依然として有利
- ✗ クエリキャッシュ無効化で常にDBヒット