Class: RubyMemcached::Memcached

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby-memcached/Memcached.rb

Defined Under Namespace

Classes: Item

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMemcached

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

#storageObject (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_exptimesObject



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