Class CASMutator<T>

java.lang.Object
net.spy.memcached.compat.SpyObject
net.spy.memcached.CASMutator<T>

public class CASMutator<T> extends SpyObject
Object that provides mutation via CAS over a given memcache client.

Example usage (reinventing incr):

 // Get or create a client.
 MemcachedClient client=[...];

 // Get a Transcoder.
 Transcoder tc = new LongTranscoder();

 // Get a mutator instance that uses that client.
 CASMutator<Long> mutator=new CASMutator<Long>(client, tc);

 // Get a mutation that knows what to do when a value is found.
 CASMutation<Long> mutation=new CASMutation<Long>() {
     public Long getNewValue(Long current) {
         return current + 1;
     }
 };

 // Do a mutation.
 long currentValue=mutator.cas(someKey, 0L, 0, mutation);
 
  • Field Details

  • Constructor Details

    • CASMutator

      public CASMutator(MemcachedClientIF c, Transcoder<T> tc, int maxTries)
      Construct a CASMutator that uses the given client.
      Parameters:
      c - the client
      tc - the Transcoder to use
      maxTries - the maximum number of attempts to get a CAS to succeed
    • CASMutator

      public CASMutator(MemcachedClientIF c, Transcoder<T> tc)
      Construct a CASMutator that uses the given client.
      Parameters:
      c - the client
      tc - the Transcoder to use
  • Method Details

    • cas

      public T cas(String key, T initial, int initialExp, CASMutation<T> m) throws Exception
      CAS a new value in for a key.

      Note that if initial is null, this method will only update existing values.

      Parameters:
      key - the key to be CASed
      initial - the value to use when the object is not cached
      initialExp - the expiration time to use when initializing
      m - the mutation to perform on an object if a value exists for the key
      Returns:
      the new value that was set
      Throws:
      Exception