用途:为 Rails 应用实现快速且正确的缓存,覆盖视图、计算与 HTTP 层。核心原则是缓存正确性优先——缓存未命中只是慢,数据过期则是缺陷;先测量再缓存,不缓存不慢的内容。
主要能力:按优先级给出缓存层级——HTTP 缓存(stale?/fresh_when)、片段缓存(cache 助手)、集合缓存(cached: true)、低级缓存(Rails.cache)、SQL 缓存。支持条件缓存 cache_if、多部分缓存键(如 [current_user, I18n.locale, product])、集合批量读取与自定义键、俄罗斯套娃嵌套缓存配合 touch: true 向上传播失效、Rails.cache.fetch 与 fetch_multi、expires_in、delete_matched、increment/decrement,以及 stale?、fresh_when、http_cache_forever 等条件 GET 用法。
使用方式:先用日志或 rack-mini-profiler 定位瓶颈,再按策略表选择缓存方式;片段缓存用 <% cache product do %>,集合用 render partial: ..., collection: ..., cached: true;低级缓存用 Rails.cache.fetch 并设置 expires_in;控制器用 fresh_when @product 或 stale? 返回 304。缓存存储可配置 Solid Cache(Rails 8 默认)、Redis、Memory 或 Null;开发环境用 bin/rails dev:cache 切换。
适用场景:循环渲染的局部模板、昂贵计算与外部 API 响应、少变内容、单条记录展示页、可预测更新的索引页与 API 端点。
限制与注意:用户相关内容必须把用户纳入缓存键;俄罗斯套娃链中每个 belongs_to 都需 touch: true;不要缓存 Active Record 对象,应缓存 ID 后重新查询;低级缓存应设置过期时间;delete_matched 并非所有存储都支持。测试应验证自身缓存行为而非 Rails 缓存本身。