Class: Boogaloo::Cache::Base
- Inherits:
-
Object
- Object
- Boogaloo::Cache::Base
- Includes:
- DRbUndumped
- Defined in:
- lib/boogaloo/cache/base.rb
Overview
Provides fundemental cache operations such as add, set, get and various statistical operations.
Direct Known Subclasses
Instance Method Summary collapse
-
#add(namespace, key, obj) ⇒ Object
Add an object to the cache only if it doesn't already exist.
-
#get(namespace, key) ⇒ Object
Get an object from the cache.
-
#initialize(name, config) ⇒ Base
constructor
Initialize a new base cache instance.
-
#inspect_keys ⇒ Object
Returns an Array of all object keys currently contained in the cache.
-
#pull(namespace, key) ⇒ Object
Pull and object from the cache (get and delete).
-
#reset ⇒ Object
Reset the cache to an empty state.
-
#set(namespace, key, obj) ⇒ Object
Add an object to the cache, overwriting if one already exists.
-
#stat_all ⇒ Object
Returns all available statistics in an Array.
-
#stat_hits ⇒ Object
The number of successful cache gets.
-
#stat_misses ⇒ Object
The number of unsuccessful cache gets.
-
#stat_namespaces ⇒ Object
The number of namespaces (plus the global namespace).
-
#stat_objects ⇒ Object
The number of objects stored in the cache.
-
#stat_reset_at ⇒ Object
The time the cache was created or last reset.
Constructor Details
#initialize(name, config) ⇒ Base
Initialize a new base cache instance.
Parameters: name: The name of the cache config: A Hash containing configuration for the cache.
15 16 17 18 19 20 21 |
# File 'lib/boogaloo/cache/base.rb', line 15 def initialize(name, config) @name = name @config = config reset end |
Instance Method Details
#add(namespace, key, obj) ⇒ Object
Add an object to the cache only if it doesn't already exist.
Parameters:
namespaceThe namespace in which the object will exist. Use nil if global namespace should be used.
keyA uniqeue identifier for the object relative to the given namespace.
objThe object to add to the cache.
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/boogaloo/cache/base.rb', line 79 def add(namespace, key, obj) return nil_error if obj.nil? debug("[#{@name}] ADD: #{namespace or 'nil'}, #{key}") if $debug if namespace.nil? @global_store[key] = obj if not @global_store.key?(key) else create_namespace(namespace) @namespace_store[namespace][key] = obj if not @namespace_store[namespace].key?(key) end end |
#get(namespace, key) ⇒ Object
Get an object from the cache.
Parameters:
namespaceThe namespace to get the object from. Use nil if global namespace should be used.
keyA uniqeue identifier for the object relative to the given namespace.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/boogaloo/cache/base.rb', line 28 def get(namespace, key) debug("[#{@name}] GET: #{namespace or 'nil'}, #{key}") if $debug if namespace.nil? @global_store.key?(key) ? @hit += 1 : @miss += 1 @global_store[key] else @miss += 1 and return nil if not @namespace_store.key?(namespace) @namespace_store[namespace].key?(key) ? @hit += 1 : @miss += 1 @namespace_store[namespace][key] end end |
#inspect_keys ⇒ Object
Returns an Array of all object keys currently contained in the cache.
Array elements:
- 0
Keys in global scope (Array).
- 1
Namespaces and their respective keys (Hash).
177 178 179 180 181 182 183 |
# File 'lib/boogaloo/cache/base.rb', line 177 def inspect_keys tmp = {} @namespace_store.keys.each { |key| tmp[key] = @namespace_store[key].keys } [@global_store.keys, tmp] end |
#pull(namespace, key) ⇒ Object
Pull and object from the cache (get and delete).
Parameters:
namespaceThe namespace to get the object from. Use nil if global namespace should be used.
keyA uniqeue identifier for the object relative to the given namespace.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/boogaloo/cache/base.rb', line 52 def pull(namespace, key) debug("[#{@name}] PULL: #{namespace or 'nil'}, #{key}") if $debug if namespace.nil? @global_store.key?(key) ? @hit += 1 : @miss += 1 @global_store.delete(key) else @miss += 1 and return nil if not @namespace_store.key?(namespace) @namespace_store[namespace].key?(key) ? @hit += 1 : @miss += 1 ret = @namespace_store[namespace].delete(key) @namespace_store.delete(namespace) if @namespace_store[namespace].size == 0 ret end end |
#reset ⇒ Object
Reset the cache to an empty state.
186 187 188 189 190 191 192 193 194 |
# File 'lib/boogaloo/cache/base.rb', line 186 def reset @hit = 0 @miss = 0 @global_store = {} @namespace_store = {} @reset_at = Time.now end |
#set(namespace, key, obj) ⇒ Object
Add an object to the cache, overwriting if one already exists.
Parameters:
namespaceThe namespace in which the object will exist. Use nil if global namespace should be used.
keyA uniqeue identifier for the object relative to the given namespace.
objThe object to add to the cache.
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/boogaloo/cache/base.rb', line 103 def set(namespace, key, obj) return nil_error if obj.nil? debug("[#{@name}] SET: #{namespace or 'nil'}, #{key}") if $debug if namespace.nil? @global_store[key] = obj else create_namespace(namespace) @namespace_store[namespace][key] = obj end end |
#stat_all ⇒ Object
Returns all available statistics in an Array.
Array elements:
- 0
stat_reset_at
- 1
stat_hits
- 2
stat_misses
- 3
stat_namespaces
- 4
stat_objects
130 131 132 133 134 |
# File 'lib/boogaloo/cache/base.rb', line 130 def stat_all return [stat_reset_at, stat_hits, stat_misses, stat_namespaces, stat_objects] end |
#stat_hits ⇒ Object
The number of successful cache gets.
144 145 146 147 148 |
# File 'lib/boogaloo/cache/base.rb', line 144 def stat_hits @hit end |
#stat_misses ⇒ Object
The number of unsuccessful cache gets.
151 152 153 154 155 |
# File 'lib/boogaloo/cache/base.rb', line 151 def stat_misses @miss end |
#stat_namespaces ⇒ Object
The number of namespaces (plus the global namespace).
158 159 160 161 162 |
# File 'lib/boogaloo/cache/base.rb', line 158 def stat_namespaces @namespace_store.size + 1 end |
#stat_objects ⇒ Object
The number of objects stored in the cache.
165 166 167 168 169 |
# File 'lib/boogaloo/cache/base.rb', line 165 def stat_objects get_obj_count end |
#stat_reset_at ⇒ Object
The time the cache was created or last reset.
137 138 139 140 141 |
# File 'lib/boogaloo/cache/base.rb', line 137 def stat_reset_at @reset_at end |