抽象控制器 Caching
Fragments
片段缓存用于缓存视图中的各种块,而无需缓存整个操作。这在操作的某些元素频繁更改或依赖于复杂状态,而其他部分很少更改或可以在多个方之间共享时很有用。缓存是使用 Action View 中可用的 cache
助手完成的。有关更多信息,请参阅 ActionView::Helpers::CacheHelper
。
虽然强烈建议您使用基于键的缓存过期(有关更多信息,请参阅 CacheHelper 中的链接),但也可以手动过期缓存。例如
expire_fragment('name_of_cache')
实例公共方法
combined_fragment_cache_key(key) 链接
给定一个键(如 expire_fragment
中所述),返回一个适合用于读取、写入或过期缓存片段的键数组。所有键都以 :views
开头,如果设置了,则后跟 ENV["RAILS_CACHE_ID"]
或 ENV["RAILS_APP_VERSION"]
,然后是任何控制器范围的键前缀值,最后是指定的 key
值。
来源:显示 | 在 GitHub 上
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 68 def combined_fragment_cache_key(key) head = self.class.fragment_cache_keys.map { |k| instance_exec(&k) } tail = key.is_a?(Hash) ? url_for(key).split("://").last : key cache_key = [:views, ENV["RAILS_CACHE_ID"] || ENV["RAILS_APP_VERSION"], head, tail] cache_key.flatten!(1) cache_key.compact! cache_key end
expire_fragment(key, options = nil) 链接
从缓存中删除片段。
key
可以采用以下三种形式之一
-
字符串
- 这通常采用路径的形式,如pages/45/notes
。 -
哈希
- 被视为对url_for
的隐式调用,如{ controller: 'pages', action: 'notes', id: 45}
-
正则表达式
- 将删除任何匹配的片段,因此%r{pages/\d*/notes}
可能会删除所有笔记。确保您在正则表达式中不使用锚点(^
或$
),因为匹配的实际文件名看起来像./cache/filename/path.cache
。注意:正则表达式
过期仅在可以迭代所有键的缓存(不像 memcached)上受支持。
options
会传递给缓存存储的 delete
方法(或 delete_matched
,对于 正则表达式
键)。
来源:显示 | 在 GitHub 上
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 131 def expire_fragment(key, options = nil) return unless cache_configured? key = combined_fragment_cache_key(key) unless key.is_a?(Regexp) instrument_fragment_cache :expire_fragment, key do if key.is_a?(Regexp) cache_store.delete_matched(key, options) else cache_store.delete(key, options) end end end
fragment_exist?(key, options = nil) 链接
检查由 key
指定的位置是否有缓存的片段存在(有关可接受的格式,请参阅 expire_fragment
)。
来源:显示 | 在 GitHub 上
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 105 def fragment_exist?(key, options = nil) return unless cache_configured? key = combined_fragment_cache_key(key) instrument_fragment_cache :exist_fragment?, key do cache_store.exist?(key, options) end end
read_fragment(key, options = nil) 链接
从由 key
指定的位置读取缓存的片段(有关可接受的格式,请参阅 expire_fragment
)。
来源:显示 | 在 GitHub 上
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 93 def read_fragment(key, options = nil) return unless cache_configured? key = combined_fragment_cache_key(key) instrument_fragment_cache :read_fragment, key do result = cache_store.read(key, options) result.respond_to?(:html_safe) ? result.html_safe : result end end
write_fragment(key, content, options = nil) 链接
将 content
写入由 key
指定的位置(有关可接受的格式,请参阅 expire_fragment
)。
来源:显示 | 在 GitHub 上
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 80 def write_fragment(key, content, options = nil) return content unless cache_configured? key = combined_fragment_cache_key(key) instrument_fragment_cache :write_fragment, key do content = content.to_str cache_store.write(key, content, options) end content end