Class: Memcache::PGServer

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ PGServer

Returns a new instance of PGServer.



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

def initialize(opts)
  @table = opts[:table]
  @db    = opts[:db] || ActiveRecord::Base.connection.raw_connection
end

Instance Attribute Details

#dbObject (readonly)

Returns the value of attribute db.



6
7
8
# File 'lib/memcache/pg_server.rb', line 6

def db
  @db
end

#tableObject (readonly)

Returns the value of attribute table.



6
7
8
# File 'lib/memcache/pg_server.rb', line 6

def table
  @table
end

Instance Method Details

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



74
75
76
77
78
79
80
# File 'lib/memcache/pg_server.rb', line 74

def add(key, value, expiry = 0)
  delete_expired(key)
  insert(key, value, expiry)
  value
rescue PGError => e
  nil
end

#append(key, value) ⇒ Object



88
89
90
91
92
93
94
95
96
# File 'lib/memcache/pg_server.rb', line 88

def append(key, value)      
  delete_expired(key)
  result = db.exec %{
    UPDATE #{table}
      SET value = value || #{quote(value)}, updated_at = NOW()
      WHERE key = #{quote(key)}
  }
  result.cmdtuples == 1
end

#decr(key, amount = 1) ⇒ Object



55
56
57
# File 'lib/memcache/pg_server.rb', line 55

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

#delete(key) ⇒ Object



59
60
61
62
63
64
# File 'lib/memcache/pg_server.rb', line 59

def delete(key)
  result = db.exec %{
    DELETE FROM #{table}
      WHERE key = #{quote(key)}
  }
end

#flush_all(delay = nil) ⇒ Object



20
21
22
# File 'lib/memcache/pg_server.rb', line 20

def flush_all(delay = nil)
  db.exec("TRUNCATE #{table}")
end

#get(keys) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/memcache/pg_server.rb', line 24

def get(keys)
  return get([keys])[keys.to_s] unless keys.kind_of?(Array)

  keys = keys.collect {|key| quote(key.to_s)}.join(',')
  sql = %{
    SELECT key, value FROM #{table}
      WHERE key IN (#{keys}) AND #{expiry_clause}
  }
  results = {}
  db.query(sql).each do |key, value|
    results[key] = value
  end
  results
end

#incr(key, amount = 1) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/memcache/pg_server.rb', line 39

def incr(key, amount = 1)
  transaction do
    value = get(key)
    return unless value        
    return unless value =~ /^\d+$/
    
    value = value.to_i + amount
    value = 0 if value < 0
    db.exec %{
      UPDATE #{table} SET value = #{quote(value)}, updated_at = NOW()
        WHERE key = #{quote(key)}
    }
    value
  end
end

#nameObject



13
14
15
16
17
18
# File 'lib/memcache/pg_server.rb', line 13

def name
  @name ||= begin
    db_config = db.instance_variable_get(:@config)
    "#{db_config[:host]}:#{db_config[:database]}:#{table}"
  end
end

#prepend(key, value) ⇒ Object



98
99
100
101
102
103
104
105
106
# File 'lib/memcache/pg_server.rb', line 98

def prepend(key, value)      
  delete_expired(key)
  result = db.exec %{
    UPDATE #{table}
      SET value = #{quote(value)} || value, updated_at = NOW()
      WHERE key = #{quote(key)}
  }
  result.cmdtuples == 1
end

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



82
83
84
85
86
# File 'lib/memcache/pg_server.rb', line 82

def replace(key, value, expiry = 0)      
  delete_expired(key)
  result = update(key, value, expiry)
  result.cmdtuples == 1 ? value : nil
end

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



66
67
68
69
70
71
72
# File 'lib/memcache/pg_server.rb', line 66

def set(key, value, expiry = 0)
  transaction do
    delete(key)
    insert(key, value, expiry)
  end
  value
end