class ActiveSupport::Cache::Entry
Entry that is put into caches. It supports expiration time on entries and can compress values to save space in the cache.
Constants
- DEFAULT_COMPRESS_LIMIT
Attributes
Public Class Methods
Create an entry with internal attributes set. This method is intended to be used by implementations that store cache entries in a native format instead of as serialized Ruby objects.
# File lib/active_support/cache.rb, line 541 def create(raw_value, created_at, options = {}) entry = new(nil) entry.instance_variable_set(:@value, raw_value) entry.instance_variable_set(:@created_at, created_at.to_f) entry.instance_variable_set(:@compressed, options[:compressed]) entry.instance_variable_set(:@expires_in, options[:expires_in]) entry end
Create a new cache entry for the specified value. Options supported are
:compress
, :compress_threshold
, and
:expires_in
.
# File lib/active_support/cache.rb, line 553 def initialize(value, options = {}) @compressed = false @expires_in = options[:expires_in] @expires_in = @expires_in.to_f if @expires_in @created_at = Time.now.to_f if value.nil? @value = nil else @value = Marshal.dump(value) if should_compress?(@value, options) @value = Zlib::Deflate.deflate(@value) @compressed = true end end end
Public Instance Methods
# File lib/active_support/cache.rb, line 594 def compressed? @compressed end
Check if the entry is expired. The expires_in
parameter can
override the value set when the entry was created.
# File lib/active_support/cache.rb, line 600 def expired? @expires_in && @created_at + @expires_in <= Time.now.to_f end
Seconds since the epoch when the entry will expire.
# File lib/active_support/cache.rb, line 614 def expires_at @expires_in ? @created_at + @expires_in : nil end
Set a new time when the entry will expire.
# File lib/active_support/cache.rb, line 605 def expires_at=(time) if time @expires_in = time.to_f - @created_at else @expires_in = nil end end
Get the raw value. This value may be serialized and compressed.
# File lib/active_support/cache.rb, line 570 def raw_value @value end
Returns the size of the cached value. This could be less than value.size if the data is compressed.
# File lib/active_support/cache.rb, line 620 def size if @value.nil? 0 else @value.bytesize end end
Get the value stored in the cache.
# File lib/active_support/cache.rb, line 575 def value # If the original value was exactly false @value is still true because # it is marshalled and eventually compressed. Both operations yield # strings. if @value # In rails 3.1 and earlier values in entries did not marshaled without # options[:compress] and if it's Numeric. # But after commit a263f377978fc07515b42808ebc1f7894fafaa3a # all values in entries are marshalled. And after that code below expects # that all values in entries will be marshaled (and will be strings). # So here we need a check for old ones. begin Marshal.load(compressed? ? Zlib::Inflate.inflate(@value) : @value) rescue TypeError compressed? ? Zlib::Inflate.inflate(@value) : @value end end end
Private Instance Methods
# File lib/active_support/cache.rb, line 629 def should_compress?(serialized_value, options) if options[:compress] compress_threshold = options[:compress_threshold] || DEFAULT_COMPRESS_LIMIT return true if serialized_value.size >= compress_threshold end false end