Class: Memcache::PGServer
Instance Attribute Summary collapse
-
#db ⇒ Object
readonly
Returns the value of attribute db.
-
#table ⇒ Object
readonly
Returns the value of attribute table.
Instance Method Summary collapse
- #add(key, value, expiry = 0) ⇒ Object
- #append(key, value) ⇒ Object
- #decr(key, amount = 1) ⇒ Object
- #delete(key) ⇒ Object
- #flush_all(delay = nil) ⇒ Object
- #get(keys) ⇒ Object
- #incr(key, amount = 1) ⇒ Object
-
#initialize(opts) ⇒ PGServer
constructor
A new instance of PGServer.
- #name ⇒ Object
- #prepend(key, value) ⇒ Object
- #replace(key, value, expiry = 0) ⇒ Object
- #set(key, value, expiry = 0) ⇒ Object
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
#db ⇒ Object (readonly)
Returns the value of attribute db.
6 7 8 |
# File 'lib/memcache/pg_server.rb', line 6 def db @db end |
#table ⇒ Object (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 |
#name ⇒ Object
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 |