Class: Async::HTTP::Cache::Store::Memory
- Inherits:
-
Object
- Object
- Async::HTTP::Cache::Store::Memory
- Defined in:
- lib/async/http/cache/store/memory.rb
Constant Summary collapse
- IF_NONE_MATCH =
'if-none-match'
- NOT_MODIFIED =
::Protocol::HTTP::Response[304]
Instance Attribute Summary collapse
-
#index ⇒ Object
readonly
Returns the value of attribute index.
Instance Method Summary collapse
- #close ⇒ Object
-
#initialize(limit: 1024) ⇒ Memory
constructor
A new instance of Memory.
- #insert(key, request, response) ⇒ Object
- #lookup(key, request) ⇒ Object
-
#prune ⇒ Integer
The number of pruned entries.
Constructor Details
#initialize(limit: 1024) ⇒ Memory
Returns a new instance of Memory.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/async/http/cache/store/memory.rb', line 28 def initialize(limit: 1024) @index = {} @limit = limit @hit = 0 @miss = 0 @pruned = 0 @gardener = Async(transient: true, annotation: self.class) do |task| while true task.sleep(60) pruned = self.prune @pruned += pruned Console.logger.debug(self) do |buffer| if pruned > 0 buffer.puts "Pruned #{pruned} entries." end buffer.puts "Hits: #{@hit} Misses: #{@miss} Pruned: #{@pruned} Ratio: #{(100.0*@hit/@miss).round(2)}%" body_usage = @index.sum{|key, value| value.body.length} buffer.puts "Index size: #{@index.size} Memory usage: #{(body_usage / 1024.0**2).round(2)}MiB" # @index.each do |key, value| # buffer.puts "#{key.join('-')}: #{value.body.length}B" # end end end end end |
Instance Attribute Details
#index ⇒ Object (readonly)
Returns the value of attribute index.
65 66 67 |
# File 'lib/async/http/cache/store/memory.rb', line 65 def index @index end |
Instance Method Details
#close ⇒ Object
61 62 63 |
# File 'lib/async/http/cache/store/memory.rb', line 61 def close @gardener.stop end |
#insert(key, request, response) ⇒ Object
96 97 98 99 100 101 102 103 |
# File 'lib/async/http/cache/store/memory.rb', line 96 def insert(key, request, response) if @index.size < @limit length = response.body&.length if length.nil? or length < 1024*64 @index[key] = response end end end |
#lookup(key, request) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/async/http/cache/store/memory.rb', line 70 def lookup(key, request) if response = @index[key] if response.expired? @index.delete(key) @pruned += 1 return nil end if = request.headers[IF_NONE_MATCH] if .include?(response.etag) return NOT_MODIFIED end end @hit += 1 return response.dup else @miss += 1 return nil end end |
#prune ⇒ Integer
Returns the number of pruned entries.
106 107 108 109 110 111 112 113 114 |
# File 'lib/async/http/cache/store/memory.rb', line 106 def prune initial_count = @index.size @index.delete_if do |key, value| value.expired? end return initial_count - @index.size end |