Class: Dalli::PipelinedDeleter

Inherits:
Object
  • Object
show all
Defined in:
lib/dalli/pipelined_deleter.rb

Overview

Contains logic for the pipelined delete operations implemented by the client. Efficiently deletes multiple keys by grouping requests by server and using quiet mode to minimize round trips.

Instance Method Summary collapse

Constructor Details

#initialize(ring, key_manager) ⇒ PipelinedDeleter

Returns a new instance of PipelinedDeleter.



10
11
12
13
# File 'lib/dalli/pipelined_deleter.rb', line 10

def initialize(ring, key_manager)
  @ring = ring
  @key_manager = key_manager
end

Instance Method Details

#process(keys) ⇒ Integer

Deletes multiple keys from memcached.

Parameters:

  • keys (Array<String>)

    keys to delete

Returns:

  • (Integer)

    the number of keys that were deleted. This is best-effort: on a network error the operation is retried, and keys deleted before the error are not recounted, so the result may under-report the number actually removed when a failure occurs.



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/dalli/pipelined_deleter.rb', line 24

def process(keys)
  return 0 if keys.empty?

  @ring.lock do
    groups = setup_requests(keys)
    finish_requests(groups)
  end
rescue Dalli::RetryableNetworkError => e
  Dalli.logger.debug { e.inspect }
  Dalli.logger.debug { 'retrying pipelined deletes because of network error' }
  retry
end