Class 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);
     
    • Constructor Detail

      • 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 Detail

      • cas

        public T cas​(java.lang.String key,
                     T initial,
                     int initialExp,
                     CASMutation<T> m)
              throws java.lang.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:
        java.lang.Exception