Class: ActiveSupport::Cache::MemoryStore
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Store
|
|
Instance Chain:
self,
Store
|
|
Inherits: |
ActiveSupport::Cache::Store
|
Defined in: | activesupport/lib/active_support/cache/memory_store.rb |
Overview
A cache store implementation which stores everything into memory in the same process. If you’re running multiple Ruby on ::Rails
server processes (which is the case if you’re using Phusion Passenger or puma clustered mode), then this means that ::Rails
server process instances won’t be able to share cache data with each other and this may not be the most appropriate cache in that scenario.
This cache has a bounded size specified by the :size
options to the initializer (default is 32Mb). When the cache exceeds the allotted size, a cleanup will occur which tries to prune the cache down to three quarters of the maximum size by removing the least recently used entries.
Unlike other ::ActiveSupport::Cache
store implementations, MemoryStore
does not compress values by default. MemoryStore
does not benefit from compression as much as other Store
implementations, as it does not send data over a network. However, when compression is enabled, it still pays the full cost of compression in terms of cpu use.
MemoryStore
is thread-safe.
Constant Summary
-
DEFAULT_CODER =
# File 'activesupport/lib/active_support/cache/memory_store.rb', line 42DupCoder
-
PER_ENTRY_OVERHEAD =
# File 'activesupport/lib/active_support/cache/memory_store.rb', line 140240
Store
- Inherited
Class Attribute Summary
-
.supports_cache_versioning? ⇒ Boolean
readonly
Advertise cache versioning support.
Store
- Inherited
Class Method Summary
Instance Attribute Summary
-
#pruning? ⇒ Boolean
readonly
Returns true if the cache is currently being pruned.
Store
- Inherited
#logger, #options, | |
#silence? | Alias for Store#silence. |
Instance Method Summary
-
#cleanup(options = nil)
Preemptively iterates through all stored keys and removes the ones which have expired.
-
#clear(options = nil)
Delete all data stored in a given cache store.
-
#decrement(name, amount = 1, options = nil)
Decrement an integer value in the cache.
-
#delete_matched(matcher, options = nil)
Deletes cache entries if the cache key matches a given pattern.
-
#increment(name, amount = 1, options = nil)
Increment an integer value in the cache.
-
#prune(target_size, max_time = nil)
To ensure entries fit within the specified memory prune the cache by removing the least recently accessed entries.
Store
- Inherited
#cleanup | Cleanups the cache by removing expired entries. |
#clear | Clears the entire cache. |
#decrement | Decrements an integer value in the cache. |
#delete | Deletes an entry in the cache. |
#delete_matched | Deletes all entries with keys matching the pattern. |
#delete_multi | Deletes multiple entries in the cache. |
#exist? | Returns |
#fetch | Fetches data from the cache, using the given key. |
#fetch_multi | Fetches data from the cache, using the given keys. |
#increment | Increments an integer value in the cache. |
#mute | Silences the logger within a block. |
#read | Reads data from the cache, using the given key. |
#read_multi | Reads multiple values at once from the cache. |
#silence, | |
#silence! | Silences the logger. |
#write | Writes the value to the cache, with the key. |
#write_multi |
|
#key_matcher | Adds the namespace defined in the options to a pattern designed to match keys. |
Constructor Details
.new(options = nil) ⇒ MemoryStore
# File 'activesupport/lib/active_support/cache/memory_store.rb', line 44
def initialize( = nil) ||= {} # Disable compression by default. [:compress] ||= false super( ) @data = {} @max_size = [:size] || 32.megabytes @max_prune_time = [:max_prune_time] || 2 @cache_size = 0 @monitor = Monitor.new @pruning = false end
Class Attribute Details
.supports_cache_versioning? ⇒ Boolean
(readonly)
Advertise cache versioning support.
# File 'activesupport/lib/active_support/cache/memory_store.rb', line 58
def self.supports_cache_versioning? true end
Instance Attribute Details
#pruning? ⇒ Boolean
(readonly)
Returns true if the cache is currently being pruned.
# File 'activesupport/lib/active_support/cache/memory_store.rb', line 103
def pruning? @pruning end
Instance Method Details
#cleanup(options = nil)
Preemptively iterates through all stored keys and removes the ones which have expired.
# File 'activesupport/lib/active_support/cache/memory_store.rb', line 71
def cleanup( = nil) = ( ) instrument(:cleanup, size: @data.size) do keys = synchronize { @data.keys } keys.each do |key| entry = @data[key] delete_entry(key, ** ) if entry && entry.expired? end end end
#clear(options = nil)
Delete all data stored in a given cache store.
# File 'activesupport/lib/active_support/cache/memory_store.rb', line 63
def clear( = nil) synchronize do @data.clear @cache_size = 0 end end
#decrement(name, amount = 1, options = nil)
Decrement an integer value in the cache.
# File 'activesupport/lib/active_support/cache/memory_store.rb', line 113
def decrement(name, amount = 1, = nil) modify_value(name, -amount, ) end
#delete_matched(matcher, options = nil)
Deletes cache entries if the cache key matches a given pattern.
# File 'activesupport/lib/active_support/cache/memory_store.rb', line 118
def delete_matched(matcher, = nil) = ( ) instrument(:delete_matched, matcher.inspect) do matcher = key_matcher(matcher, ) keys = synchronize { @data.keys } keys.each do |key| delete_entry(key, ** ) if key.match(matcher) end end end
#increment(name, amount = 1, options = nil)
Increment an integer value in the cache.
# File 'activesupport/lib/active_support/cache/memory_store.rb', line 108
def increment(name, amount = 1, = nil) modify_value(name, amount, ) end
#prune(target_size, max_time = nil)
To ensure entries fit within the specified memory prune the cache by removing the least recently accessed entries.
# File 'activesupport/lib/active_support/cache/memory_store.rb', line 84
def prune(target_size, max_time = nil) return if pruning? @pruning = true begin start_time = Concurrent.monotonic_time cleanup instrument(:prune, target_size, from: @cache_size) do keys = synchronize { @data.keys } keys.each do |key| delete_entry(key, ** ) return if @cache_size <= target_size || (max_time && Concurrent.monotonic_time - start_time > max_time) end end ensure @pruning = false end end