Class: Memcache::SegmentedServer

Inherits:
Server show all
Defined in:
lib/memcache/segmented_server.rb

Constant Summary collapse

MAX_SIZE =

bytes

1000000
PARTIAL_VALUE =
0x40000000

Constants inherited from Server

Memcache::Server::CONNECT_TIMEOUT, Memcache::Server::DEFAULT_PORT, Memcache::Server::READ_RETRY_DELAY

Instance Attribute Summary

Attributes inherited from Server

#host, #port, #retry_at, #status

Instance Method Summary collapse

Methods inherited from Server

#alive?, #append, #clone, #close, #count, #decr, #delete, #flush_all, #gets, #incr, #initialize, #inspect, #name, #prepend, #readonly?, #stats, #strict_reads?

Constructor Details

This class inherits a constructor from Memcache::Server

Instance Method Details

#add(key, value, expiry = 0, flags = 0) ⇒ Object



57
58
59
60
# File 'lib/memcache/segmented_server.rb', line 57

def add(key, value, expiry = 0, flags = 0)
  value, flags = store_segments(key, value, expiry, flags)
  super(key, value, expiry, flags)
end

#cas(key, value, cas, expiry = 0, flags = 0) ⇒ Object



52
53
54
55
# File 'lib/memcache/segmented_server.rb', line 52

def cas(key, value, cas, expiry = 0, flags = 0)
  value, flags = store_segments(key, value, expiry, flags)
  super(key, value, cas, expiry, flags)
end

#get(keys, opts = {}) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/memcache/segmented_server.rb', line 8

def get(keys, opts = {})
  return get([keys], opts)[keys.to_s] unless keys.kind_of?(Array)
  return {} if keys.empty?

  results = super
  keys = {}
  keys_to_fetch = []
  results.each do |key, value|
    next unless segmented?(value)
    hash, num = value.split(':')
    keys[key] = []
    num.to_i.times do |i|
      hash_key = "#{hash}:#{i}"
      keys_to_fetch << hash_key
      keys[key]     << hash_key 
    end
  end
  
  parts = super(keys_to_fetch)
  keys.each do |key, hashes|
    value = ''
    hashes.each do |hash_key|          
      if part = parts[hash_key]
        value << part
      else
        value = nil
        break
      end
    end

    if value
      value.memcache_cas   = results[key].memcache_cas
      value.memcache_flags = results[key].memcache_flags ^ PARTIAL_VALUE
      results[key] = value
    end
  end
  results
end

#replace(key, value, expiry = 0, flags = 0) ⇒ Object



62
63
64
65
# File 'lib/memcache/segmented_server.rb', line 62

def replace(key, value, expiry = 0, flags = 0)
  value, flags = store_segments(key, value, expiry, flags)
  super(key, value, expiry, flags)
end

#set(key, value, expiry = 0, flags = 0) ⇒ Object



47
48
49
50
# File 'lib/memcache/segmented_server.rb', line 47

def set(key, value, expiry = 0, flags = 0)
  value, flags = store_segments(key, value, expiry, flags)
  super(key, value, expiry, flags) && value
end