Class: Memcache::LocalServer

Inherits:
Object
  • Object
show all
Defined in:
lib/memcache/local_server.rb

Instance Method Summary collapse

Constructor Details

#initializeLocalServer

Returns a new instance of LocalServer.



3
4
5
6
# File 'lib/memcache/local_server.rb', line 3

def initialize
  @data = {}
  @expiry = {}
end

Instance Method Details

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



85
86
87
88
# File 'lib/memcache/local_server.rb', line 85

def add(key, value, expiry = 0, flags = 0)
  return nil if get(key)
  set(key, value, expiry)
end

#append(key, value) ⇒ Object



95
96
97
98
99
# File 'lib/memcache/local_server.rb', line 95

def append(key, value)
  existing = get(key)
  return nil if existing.nil?
  set(key, existing + value)
end

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



80
81
82
83
# File 'lib/memcache/local_server.rb', line 80

def cas(key, value, cas, expiry = 0, flags = 0)
  # No cas implementation yet, just do a set for now.
  set(key, value, expiry, flags)
end

#decr(key, amount = 1) ⇒ Object



60
61
62
# File 'lib/memcache/local_server.rb', line 60

def decr(key, amount = 1)
  incr(key, -amount)
end

#delete(key) ⇒ Object



64
65
66
# File 'lib/memcache/local_server.rb', line 64

def delete(key)
  @data.delete(key.to_s)
end

#flush_all(delay = 0) ⇒ Object



19
20
21
22
23
# File 'lib/memcache/local_server.rb', line 19

def flush_all(delay = 0)
  raise 'flush_all not supported with delay' if delay != 0
  @data.clear
  @expiry.clear
end

#get(keys, cas = false) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/memcache/local_server.rb', line 29

def get(keys, cas = false)
  if keys.kind_of?(Array)
    hash = {}
    keys.each do |key|
      key = key.to_s
      val = get(key)
      hash[key] = val if val
    end
    hash
  else
    key = keys.to_s
    if @expiry[key] and Time.now > @expiry[key]
      @data[key]   = nil
      @expiry[key] = nil
    end
    @data[key]
  end
end

#gets(keys) ⇒ Object



25
26
27
# File 'lib/memcache/local_server.rb', line 25

def gets(keys)
  get(keys, true)
end

#incr(key, amount = 1) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/memcache/local_server.rb', line 48

def incr(key, amount = 1)
  key = key.to_s
  value = get(key)
  return unless value
  return unless value =~ /^\d+$/

  value = value.to_i + amount
  value = 0 if value < 0
  @data[key] = value.to_s
  value
end

#nameObject



8
9
10
# File 'lib/memcache/local_server.rb', line 8

def name
  "local:#{hash}"
end

#prepend(key, value) ⇒ Object



101
102
103
104
105
# File 'lib/memcache/local_server.rb', line 101

def prepend(key, value)
  existing = get(key)
  return nil if existing.nil?
  set(key, value + existing)
end

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



90
91
92
93
# File 'lib/memcache/local_server.rb', line 90

def replace(key, value, expiry = 0, flags = 0)
  return nil if get(key).nil?
  set(key, value, expiry)
end

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



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/memcache/local_server.rb', line 68

def set(key, value, expiry = 0, flags = 0)
  key = key.to_s
  @data[key] = value.to_s
  if expiry.kind_of?(Time)
    @expiry[key] = expiry
  else  
    expiry = expiry.to_i
    @expiry[key] = expiry == 0 ? nil : Time.now + expiry
  end
  value
end

#statsObject



12
13
14
15
16
17
# File 'lib/memcache/local_server.rb', line 12

def stats
  { # curr_items may include items that have expired.
    'curr_items'   => @data.size,
    'expiry_count' => @expiry.size,
  }
end