Class: RubyMemcached::Memcached
- Inherits:
-
Object
- Object
- RubyMemcached::Memcached
- Defined in:
- lib/ruby-memcached/Memcached.rb
Defined Under Namespace
Classes: Item
Instance Attribute Summary collapse
-
#storage ⇒ Object
readonly
Returns the value of attribute storage.
Instance Method Summary collapse
- #add(key, flags, exptime, bytes, data) ⇒ Object
- #append(key, bytes, data) ⇒ Object
- #cas(key, flags, exptime, bytes, cas_id, data) ⇒ Object
- #check_exptime(key) ⇒ Object
- #check_exptimes ⇒ Object
- #delete(key) ⇒ Object
- #get(key) ⇒ Object
- #get_multi(keys) ⇒ Object
-
#initialize ⇒ Memcached
constructor
A new instance of Memcached.
- #prepend(key, bytes, data) ⇒ Object
- #replace(key, flags, exptime, bytes, data) ⇒ Object
- #set(key, flags, exptime, bytes, data) ⇒ Object
Constructor Details
#initialize ⇒ Memcached
Returns a new instance of Memcached.
8 9 10 |
# File 'lib/ruby-memcached/Memcached.rb', line 8 def initialize @storage = Concurrent::Hash.new() end |
Instance Attribute Details
#storage ⇒ Object (readonly)
Returns the value of attribute storage.
6 7 8 |
# File 'lib/ruby-memcached/Memcached.rb', line 6 def storage @storage end |
Instance Method Details
#add(key, flags, exptime, bytes, data) ⇒ Object
37 38 39 40 41 42 43 44 |
# File 'lib/ruby-memcached/Memcached.rb', line 37 def add(key, flags, exptime, bytes, data) self.check_exptime(key) return Responses.not_stored if @storage.key?(key) new_item = Item.new(key, data, flags, exptime, bytes, 0) @storage.store(key, new_item) return Responses.stored end |
#append(key, bytes, data) ⇒ Object
56 57 58 59 60 61 62 63 64 |
# File 'lib/ruby-memcached/Memcached.rb', line 56 def append(key, bytes, data) self.check_exptime(key) return Responses.not_stored unless @storage.key?(key) @storage[key].data.concat(data) @storage[key].bytes += bytes @storage[key].cas_id += 1 return Responses.stored end |
#cas(key, flags, exptime, bytes, cas_id, data) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/ruby-memcached/Memcached.rb', line 76 def cas(key, flags, exptime, bytes, cas_id, data) self.check_exptime(key) return Responses.not_found unless @storage.key?(key) old_item = @storage[key] old_item.lock.synchronize do return Responses.exists if old_item.cas_id != cas_id new_item = Item.new(key, data, flags, exptime, bytes, old_item.cas_id + 1) @storage.store(key, new_item) return Responses.stored end end |
#check_exptime(key) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/ruby-memcached/Memcached.rb', line 97 def check_exptime(key) value = @storage[key] return true if value.nil?() || value.exptime.nil?() current_time = Time.now().getutc() if (current_time > value.exptime) @storage.delete(key) return false end return true end |
#check_exptimes ⇒ Object
111 112 113 114 115 116 117 |
# File 'lib/ruby-memcached/Memcached.rb', line 111 def check_exptimes() deleted = 0 @storage.each_key do | key | delete += 1 unless self.check_exptime(key) end return deleted end |
#delete(key) ⇒ Object
91 92 93 94 95 |
# File 'lib/ruby-memcached/Memcached.rb', line 91 def delete(key) return Responses.not_found unless @storage.key?(key) @storage.delete(key) return Responses.deleted end |
#get(key) ⇒ Object
12 13 14 15 |
# File 'lib/ruby-memcached/Memcached.rb', line 12 def get(key) self.check_exptime(key) return @storage[key] end |
#get_multi(keys) ⇒ Object
17 18 19 20 21 22 23 24 |
# File 'lib/ruby-memcached/Memcached.rb', line 17 def get_multi(keys) result = [] for key in keys do item = self.get(key) result.append(item) unless item.nil? end return result end |
#prepend(key, bytes, data) ⇒ Object
66 67 68 69 70 71 72 73 74 |
# File 'lib/ruby-memcached/Memcached.rb', line 66 def prepend(key, bytes, data) self.check_exptime(key) return Responses.not_stored unless @storage.key?(key) @storage[key].data.prepend(data) @storage[key].bytes += bytes @storage[key].cas_id += 1 return Responses.stored end |
#replace(key, flags, exptime, bytes, data) ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/ruby-memcached/Memcached.rb', line 46 def replace(key, flags, exptime, bytes, data) self.check_exptime(key) return Responses.not_stored unless @storage.key?(key) cas_id = @storage[key].cas_id + 1 new_item = Item.new(key, data, flags, exptime, bytes, cas_id) @storage.store(key, new_item) return Responses.stored end |
#set(key, flags, exptime, bytes, data) ⇒ Object
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/ruby-memcached/Memcached.rb', line 26 def set(key, flags, exptime, bytes, data) if(@storage.key?(key)) cas_id = @storage[key].cas_id + 1 else cas_id = 0 end new_item = Item.new(key, data, flags, exptime, bytes, cas_id) @storage.store(key, new_item) return Responses.stored end |