instance method
cas
Ruby on Rails 2.3.18
Since v2.3.18 Last seen in v2.3.18Signature
cas(key, expiry=0, raw=false)
“cas” is a check and set operation which means “store this data but only if no one else has updated since I last fetched it.” This can be used as a form of optimistic locking.
Works in block form like so:
cache.cas('some-key') do |value| value + 1 end
Returns: nil if the value was not found on the memcached server. STORED if the value was updated successfully EXISTS if the value was updated by someone else since last fetch
Parameters
-
keyreq -
expiryopt = 0 -
rawopt = false
Source
# File activesupport/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb, line 355
def cas(key, expiry=0, raw=false)
raise MemCacheError, "Update of readonly cache" if @readonly
raise MemCacheError, "A block is required" unless block_given?
(value, token) = gets(key, raw)
return nil unless value
updated = yield value
with_server(key) do |server, cache_key|
value = Marshal.dump updated unless raw
logger.debug { "cas #{key} to #{server.inspect}: #{value.to_s.size}" } if logger
command = "cas #{cache_key} 0 #{expiry} #{value.to_s.size} #{token}#{noreply}\r\n#{value}\r\n"
with_socket_management(server) do |socket|
socket.write command
break nil if @no_reply
result = socket.gets
raise_on_error_response! result
if result.nil?
server.close
raise MemCacheError, "lost connection to #{server.host}:#{server.port}"
end
result
end
end
end
Defined in activesupport/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb line 355
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in MemCache