instance method cas

Ruby on Rails 2.3.18

Since v2.3.18 Last seen in v2.3.18

Signature

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

key req
expiry opt = 0
raw opt = 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

Type at least 2 characters to search.

↑↓ navigate · open · esc close