Class: ActiveSupport::Cache::Entry

Inherits:
Object
  • Object
show all
Defined in:
activesupport/lib/active_support/cache.rb

Overview

This class is used to represent cache entries. Cache entries have a value and an optional expiration time. The expiration time is used to support the :race_condition_ttl option on the cache.

Since cache entries in most instances will be serialized, the internals of this class are highly optimized using short instance variable names that are lazily defined.

Constant Summary collapse

DEFAULT_COMPRESS_LIMIT =
16.kilobytes

Instance Method Summary collapse

Constructor Details

#initialize(value, options = {}) ⇒ Entry

Create a new cache entry for the specified value. Options supported are :compress, :compress_threshold, and :expires_in.


604
605
606
607
608
609
610
611
612
613
614
# File 'activesupport/lib/active_support/cache.rb', line 604

def initialize(value, options = {})
  if should_compress?(value, options)
    @value = compress(value)
    @compressed = true
  else
    @value = value
  end
  @created_at = Time.now.to_f
  @expires_in = options[:expires_in]
  @expires_in = @expires_in.to_f if @expires_in
end

Instance Method Details

#dup_value!Object

Duplicate the value in a class. This is used by cache implementations that don't natively serialize entries to protect against accidental cache modifications.


659
660
661
662
663
664
665
666
667
668
# File 'activesupport/lib/active_support/cache.rb', line 659

def dup_value!
  convert_version_4beta1_entry! if defined?(@v)
  if @value && !compressed? && !(@value.is_a?(Numeric) || @value == true || @value == false)
    if @value.is_a?(String)
      @value = @value.dup
    else
      @value = Marshal.load(Marshal.dump(@value))
    end
  end
end

#expired?Boolean

Check if the entry is expired. The expires_in parameter can override the value set when the entry was created.

Returns:

  • (Boolean)

623
624
625
626
# File 'activesupport/lib/active_support/cache.rb', line 623

def expired?
  convert_version_4beta1_entry! if defined?(@value)
  @expires_in && @created_at + @expires_in <= Time.now.to_f
end

#expires_atObject


628
629
630
# File 'activesupport/lib/active_support/cache.rb', line 628

def expires_at
  @expires_in ? @created_at + @expires_in : nil
end

#expires_at=(value) ⇒ Object


632
633
634
635
636
637
638
# File 'activesupport/lib/active_support/cache.rb', line 632

def expires_at=(value)
  if value
    @expires_in = value.to_f - @created_at
  else
    @expires_in = nil
  end
end

#sizeObject

Returns the size of the cached value. This could be less than value.size if the data is compressed.


642
643
644
645
646
647
648
649
650
651
652
653
654
655
# File 'activesupport/lib/active_support/cache.rb', line 642

def size
  if defined?(@s)
    @s
  else
    case value
    when NilClass
      0
    when String
      @value.bytesize
    else
      @s = Marshal.dump(@value).bytesize
    end
  end
end

#valueObject


616
617
618
619
# File 'activesupport/lib/active_support/cache.rb', line 616

def value
  convert_version_4beta1_entry! if defined?(@v)
  compressed? ? uncompress(@value) : @value
end