内存缓存存储
一个缓存存储实现,它将所有内容存储在同一进程的内存中。如果您运行多个 Ruby on Rails 服务器进程(如果您使用 Phusion Passenger 或 puma 集群模式,就会出现这种情况),那么这意味着 Rails 服务器进程实例将无法相互共享缓存数据,在这种情况下,这可能不是最合适的缓存。
此缓存的大小受初始化程序的 :size
选项限制(默认值为 32Mb)。当缓存超过分配的大小后,将进行清理操作,该操作尝试通过删除最近最少使用(LRU)的条目,将缓存修剪至最大大小的四分之三。
与其他 Cache
存储实现不同,MemoryStore
默认情况下不会压缩值。MemoryStore
从压缩中获得的收益不如其他 Store
实现,因为它不发送数据到网络。但是,当启用压缩时,它仍然需要支付压缩在 CPU 使用方面的全部成本。
MemoryStore
是线程安全的。
- C
- D
- I
- N
- P
- S
常量
PER_ENTRY_OVERHEAD | = | 240 |
类公有方法
new(options = nil) 链接
来源:显示 | 在 GitHub 上
# File activesupport/lib/active_support/cache/memory_store.rb, line 73 def initialize(options = nil) options ||= {} options[:coder] = DupCoder unless options.key?(:coder) || options.key?(:serializer) # Disable compression by default. options[:compress] ||= false super(options) @data = {} @max_size = options[:size] || 32.megabytes @max_prune_time = options[:max_prune_time] || 2 @cache_size = 0 @monitor = Monitor.new @pruning = false end
supports_cache_versioning?() 链接
宣传缓存版本支持。
来源:显示 | 在 GitHub 上
# File activesupport/lib/active_support/cache/memory_store.rb, line 88 def self.supports_cache_versioning? true end
实例公有方法
cleanup(options = nil) 链接
抢先遍历所有存储的键并删除已过期的键。
来源:显示 | 在 GitHub 上
# File activesupport/lib/active_support/cache/memory_store.rb, line 101 def cleanup(options = nil) options = merged_options(options) _instrument(:cleanup, size: @data.size) do keys = synchronize { @data.keys } keys.each do |key| entry = @data[key] delete_entry(key, **options) if entry && entry.expired? end end end
clear(options = nil) 链接
删除存储在给定缓存存储中的所有数据。
来源:显示 | 在 GitHub 上
# File activesupport/lib/active_support/cache/memory_store.rb, line 93 def clear(options = nil) synchronize do @data.clear @cache_size = 0 end end
decrement(name, amount = 1, options = nil) 链接
递减缓存的整数值。返回更新后的值。
如果键未设置或已过期,它将被设置为 -amount
。
cache.decrement("foo") # => -1
要设置特定值,请调用 write
cache.write("baz", 5)
cache.decrement("baz") # => 4
来源:显示 | 在 GitHub 上
# File activesupport/lib/active_support/cache/memory_store.rb, line 166 def decrement(name, amount = 1, options = nil) instrument(:decrement, name, amount: amount) do modify_value(name, -amount, options) end end
delete_matched(matcher, options = nil) 链接
如果缓存键与给定模式匹配,则删除缓存条目。
来源:显示 | 在 GitHub 上
# File activesupport/lib/active_support/cache/memory_store.rb, line 173 def delete_matched(matcher, options = nil) options = merged_options(options) matcher = key_matcher(matcher, options) instrument(:delete_matched, matcher.inspect) do keys = synchronize { @data.keys } keys.each do |key| delete_entry(key, **options) if key.match(matcher) end end end
increment(name, amount = 1, options = nil) 链接
递增缓存的整数值。返回更新后的值。
如果键未设置,它将被设置为 amount
cache.increment("foo") # => 1
cache.increment("bar", 100) # => 100
要设置特定值,请调用 write
cache.write("baz", 5)
cache.increment("baz") # => 6
来源:显示 | 在 GitHub 上
# File activesupport/lib/active_support/cache/memory_store.rb, line 149 def increment(name, amount = 1, options = nil) instrument(:increment, name, amount: amount) do modify_value(name, amount, options) end end
prune(target_size, max_time = nil) 链接
为了确保条目适合指定的内存,通过删除最近最少访问的条目来修剪缓存。
来源:显示 | 在 GitHub 上
# File activesupport/lib/active_support/cache/memory_store.rb, line 114 def prune(target_size, max_time = nil) return if pruning? @pruning = true begin start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) cleanup instrument(:prune, target_size, from: @cache_size) do keys = synchronize { @data.keys } keys.each do |key| delete_entry(key, **options) return if @cache_size <= target_size || (max_time && Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time > max_time) end end ensure @pruning = false end end
pruning?() 链接
如果缓存当前正在修剪,则返回 true。
来源:显示 | 在 GitHub 上
# File activesupport/lib/active_support/cache/memory_store.rb, line 133 def pruning? @pruning end