Module: Memcache::Segmented

Included in:
SegmentedNativeServer, SegmentedServer
Defined in:
lib/memcache/segmented.rb

Constant Summary collapse

MAX_SIZE =

bytes

1000000
PARTIAL_VALUE =
0x40000000

Instance Method Summary collapse

Instance Method Details

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



56
57
58
59
# File 'lib/memcache/segmented.rb', line 56

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

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



49
50
51
52
53
54
# File 'lib/memcache/segmented.rb', line 49

def cas(key, value, cas, expiry = 0, flags = 0)
  delete(key) do
    hash, flags = store_segments(key, value, expiry, flags)
    super(key, hash, cas, expiry, flags) && value
  end
end

#delete(key) ⇒ Object



68
69
70
71
72
73
74
75
# File 'lib/memcache/segmented.rb', line 68

def delete(key)
  result = super_get(key)
  enable = block_given? ? yield : super
  if enable and result and segmented?(result)
    segment_keys(result).each {|k| super(k)}
  end
  enable
end

#get(keys, cas = nil) ⇒ 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
# File 'lib/memcache/segmented.rb', line 8

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

  results = super(keys, cas)
  keys = {}
  keys_to_fetch = []
  results.each do |key, result|
    next unless segmented?(result)
    keys[key] = segment_keys(result)
    keys_to_fetch.concat keys[key]
  end

  parts = super(keys_to_fetch)
  return {} if parts.nil?

  keys.each do |key, hashes|
    value = ''
    hashes.each do |hash_key|
      part = parts[hash_key]
      if part and part[:value]
        value << part[:value]
      else
        value = nil
        break
      end
    end

    results[key][:value] = value
    results[key][:flags] ^= PARTIAL_VALUE
  end
  results
end

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



61
62
63
64
65
66
# File 'lib/memcache/segmented.rb', line 61

def replace(key, value, expiry = 0, flags = 0)
  delete(key) do
    hash, flags = store_segments(key, value, expiry, flags)
    super(key, hash, expiry, flags) && value
  end
end

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



42
43
44
45
46
47
# File 'lib/memcache/segmented.rb', line 42

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