Class: RedisMemo::Memoizable
- Inherits:
-
Object
- Object
- RedisMemo::Memoizable
- Defined in:
- lib/redis_memo/memoizable.rb
Defined Under Namespace
Modules: Invalidation Classes: Dependency
Instance Attribute Summary collapse
-
#depends_on ⇒ Object
readonly
Returns the value of attribute depends_on.
-
#props ⇒ Object
Returns the value of attribute props.
Class Method Summary collapse
-
.checksums(instances_groups) ⇒ Object
Calculate the checksums for all memoizable groups in one Redis round trip.
- .invalidate(instances) ⇒ Object
Instance Method Summary collapse
- #cache_key ⇒ Object
- #extra_props(**args) ⇒ Object
-
#initialize(**props, &depends_on) ⇒ Memoizable
constructor
A new instance of Memoizable.
Constructor Details
#initialize(**props, &depends_on) ⇒ Memoizable
Returns a new instance of Memoizable.
10 11 12 13 14 |
# File 'lib/redis_memo/memoizable.rb', line 10 def initialize(**props, &depends_on) @props = props @depends_on = depends_on @cache_key = nil end |
Instance Attribute Details
#depends_on ⇒ Object (readonly)
Returns the value of attribute depends_on.
8 9 10 |
# File 'lib/redis_memo/memoizable.rb', line 8 def depends_on @depends_on end |
#props ⇒ Object
Returns the value of attribute props.
7 8 9 |
# File 'lib/redis_memo/memoizable.rb', line 7 def props @props end |
Class Method Details
.checksums(instances_groups) ⇒ Object
Calculate the checksums for all memoizable groups in one Redis round trip
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/redis_memo/memoizable.rb', line 32 def self.checksums(instances_groups) dependents_cache_keys = [] cache_key_groups = instances_groups.map do |instances| cache_keys = instances.map(&:cache_key) dependents_cache_keys += cache_keys cache_keys end dependents_cache_keys.uniq! dependents_versions = find_or_create_versions(dependents_cache_keys) version_hash = dependents_cache_keys.zip(dependents_versions).to_h cache_key_groups.map do |cache_keys| RedisMemo.checksum(version_hash.slice(*cache_keys).to_json) end end |
.invalidate(instances) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/redis_memo/memoizable.rb', line 49 def self.invalidate(instances) instances.each do |instance| cache_key = instance.cache_key RedisMemo::Memoizable::Invalidation.bump_version_later( cache_key, RedisMemo.uuid, ) end RedisMemo::Memoizable::Invalidation.drain_invalidation_queue end |
Instance Method Details
#cache_key ⇒ Object
22 23 24 25 26 27 28 29 |
# File 'lib/redis_memo/memoizable.rb', line 22 def cache_key @cache_key ||= [ self.class.name, RedisMemo.checksum( RedisMemo.deep_sort_hash(@props).to_json, ), ].join(':') end |
#extra_props(**args) ⇒ Object
16 17 18 19 20 |
# File 'lib/redis_memo/memoizable.rb', line 16 def extra_props(**args) instance = dup instance.props = props.dup.merge(**args) instance end |