Class: ActiveSupport::Cache::Entry
- Defined in:
- lib/active_support/cache.rb
Overview
This class is used to represent cache entries. Cache entries have a value, an optional expiration time, and an optional version. The expiration time is used to support the :race_condition_ttl option on the cache. The version is used to support the :version option on the cache for rejecting mismatches.
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 =
1.kilobyte
Instance Attribute Summary collapse
-
#version ⇒ Object
readonly
:nodoc:.
Instance Method Summary collapse
-
#bytesize ⇒ Object
Returns the size of the cached value.
-
#dup_value! ⇒ Object
Duplicates the value in a class.
-
#expired? ⇒ Boolean
Checks if the entry is expired.
- #expires_at ⇒ Object
- #expires_at=(value) ⇒ Object
-
#initialize(value, compress: true, compress_threshold: DEFAULT_COMPRESS_LIMIT, version: nil, expires_in: nil) ⇒ Entry
constructor
Creates a new cache entry for the specified value.
- #mismatched?(version) ⇒ Boolean
- #value ⇒ Object
Constructor Details
#initialize(value, compress: true, compress_threshold: DEFAULT_COMPRESS_LIMIT, version: nil, expires_in: nil) ⇒ Entry
Creates a new cache entry for the specified value. Options supported are :compress
, :compress_threshold
, :version
and :expires_in
.
780 781 782 783 784 785 786 787 |
# File 'lib/active_support/cache.rb', line 780 def initialize(value, compress: true, compress_threshold: DEFAULT_COMPRESS_LIMIT, version: nil, expires_in: nil, **) @value = value @version = version @created_at = Time.now.to_f @expires_in = expires_in && expires_in.to_f compress!(compress_threshold) if compress end |
Instance Attribute Details
#version ⇒ Object (readonly)
:nodoc:
774 775 776 |
# File 'lib/active_support/cache.rb', line 774 def version @version end |
Instance Method Details
#bytesize ⇒ Object
Returns the size of the cached value. This could be less than value.bytesize
if the data is compressed.
817 818 819 820 821 822 823 824 825 826 |
# File 'lib/active_support/cache.rb', line 817 def bytesize case value when NilClass 0 when String @value.bytesize else @s ||= Marshal.dump(@value).bytesize end end |
#dup_value! ⇒ Object
Duplicates the value in a class. This is used by cache implementations that don’t natively serialize entries to protect against accidental cache modifications.
830 831 832 833 834 835 836 837 838 |
# File 'lib/active_support/cache.rb', line 830 def dup_value! 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
Checks if the entry is expired. The expires_in
parameter can override the value set when the entry was created.
799 800 801 |
# File 'lib/active_support/cache.rb', line 799 def expired? @expires_in && @created_at + @expires_in <= Time.now.to_f end |
#expires_at ⇒ Object
803 804 805 |
# File 'lib/active_support/cache.rb', line 803 def expires_at @expires_in ? @created_at + @expires_in : nil end |
#expires_at=(value) ⇒ Object
807 808 809 810 811 812 813 |
# File 'lib/active_support/cache.rb', line 807 def expires_at=(value) if value @expires_in = value.to_f - @created_at else @expires_in = nil end end |
#mismatched?(version) ⇒ Boolean
793 794 795 |
# File 'lib/active_support/cache.rb', line 793 def mismatched?(version) @version && version && @version != version end |
#value ⇒ Object
789 790 791 |
# File 'lib/active_support/cache.rb', line 789 def value compressed? ? uncompress(@value) : @value end |