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.
Attributes inherited from Base
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
Methods inherited from Base
Constructor Details
#initialize(opts) ⇒ PGServer
Returns a new instance of PGServer.
14 15 16 17 |
# File 'lib/memcache/pg_server.rb', line 14 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.
12 13 14 |
# File 'lib/memcache/pg_server.rb', line 12 def db @db end |
#table ⇒ Object (readonly)
Returns the value of attribute table.
12 13 14 |
# File 'lib/memcache/pg_server.rb', line 12 def table @table end |
Instance Method Details
#add(key, value, expiry = 0) ⇒ Object
82 83 84 85 86 87 88 |
# File 'lib/memcache/pg_server.rb', line 82 def add(key, value, expiry = 0) delete_expired(key) insert(key, value, expiry) value rescue PGError => e nil end |
#append(key, value) ⇒ Object
96 97 98 99 100 101 102 103 104 |
# File 'lib/memcache/pg_server.rb', line 96 def append(key, value) delete_expired(key) result = db.exec %{ UPDATE #{table} SET value = value || #{quote(value)}, updated_at = NOW() WHERE key = #{quote(key)} AND #{prefix_clause} } result.cmdtuples == 1 end |
#decr(key, amount = 1) ⇒ Object
62 63 64 |
# File 'lib/memcache/pg_server.rb', line 62 def decr(key, amount = 1) incr(key, -amount) end |
#delete(key) ⇒ Object
66 67 68 69 70 71 72 |
# File 'lib/memcache/pg_server.rb', line 66 def delete(key) result = db.exec %{ DELETE FROM #{table} WHERE key = #{quote(key)} AND #{prefix_clause} } result.cmdtuples == 1 end |
#flush_all(delay = nil) ⇒ Object
26 27 28 |
# File 'lib/memcache/pg_server.rb', line 26 def flush_all(delay = nil) db.exec("TRUNCATE #{table}") end |
#get(keys) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/memcache/pg_server.rb', line 30 def get(keys) return get([keys])[keys.to_s] unless keys.kind_of?(Array) return {} if keys.empty? keys = keys.collect {|key| quote(key.to_s)}.join(',') sql = %{ SELECT key, value FROM #{table} WHERE key IN (#{keys}) AND #{prefix_clause} AND #{expiry_clause} } results = {} db.query(sql).each do |key, value| results[key] = value end results end |
#incr(key, amount = 1) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/memcache/pg_server.rb', line 46 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)} AND #{prefix_clause} } value end end |
#name ⇒ Object
19 20 21 22 23 24 |
# File 'lib/memcache/pg_server.rb', line 19 def name @name ||= begin db_config = db.instance_variable_get(:@config) "#{db_config[:host]}:#{db_config[:database]}:#{table}" end end |
#prepend(key, value) ⇒ Object
106 107 108 109 110 111 112 113 114 |
# File 'lib/memcache/pg_server.rb', line 106 def prepend(key, value) delete_expired(key) result = db.exec %{ UPDATE #{table} SET value = #{quote(value)} || value, updated_at = NOW() WHERE key = #{quote(key)} AND #{prefix_clause} } result.cmdtuples == 1 end |
#replace(key, value, expiry = 0) ⇒ Object
90 91 92 93 94 |
# File 'lib/memcache/pg_server.rb', line 90 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
74 75 76 77 78 79 80 |
# File 'lib/memcache/pg_server.rb', line 74 def set(key, value, expiry = 0) transaction do delete(key) insert(key, value, expiry) end value end |