Introducing Dragonfly Cloud! Learn More

Java Memcached Gets (Detailed Guide w/ Code Examples)

Use Case(s)

gets in Memcached, when used with Java, is commonly utilized to read data from the cache. Unlike a simple get operation, gets also returns a unique identifier called 'CAS value' (Compare And Swap). This is particularly beneficial when multiple threads are potentially updating the same key and you want to avoid the "lost update" problem using optimistic locking.

Code Examples

Here we're using spyMemcached, a well known Java client for Memcached.

Example 1 – Basic usage of gets

// Assume MemcachedClient instance is memcachedClient // Set a value first memcachedClient.set("key", 3600, "value"); // Now get CASValue using gets CASValue casValue = memcachedClient.gets("key"); // The value can be retrieved using String value = (String) casValue.getValue(); // And the CAS token is retrieved using long casId = casValue.getCas();

Example 2 - Utilizing the CAS token for a Compare And Swap operation

// Assume MemcachedClient instance is memcachedClient // Set a value first memcachedClient.set("key", 3600, "value"); // Now get CASValue using gets CASValue casValue = memcachedClient.gets("key"); long casId = casValue.getCas(); // Let's attempt to replace the stored value using the retrieved CAS token CASResponse casResp = memcachedClient.cas("key", casId, "newValue"); if(casResp == CASResponse.OK) { System.out.println("Successfully replaced value!"); } else { System.out.println("Couldn't replace value. CAS token might have changed."); }

In the second example, a Memcached cas operation is performed after retrieving the CAS token using gets. If the cas operation is successful, it means no other thread updated the key in between your gets and cas operations.

Best Practices

  1. Use gets and the corresponding cas operation when dealing with multi-threaded scenarios where the same key could be updated by different threads to avoid lost updates.
  2. Do not overuse gets if you do not need CAS functionality. A simple get operation is less resource intensive.

Common Mistakes

  1. Thinking of gets as simply another get. Remember, gets retrieves not just the value but also a CAS token which can be used for compare-and-swap operations.
  2. Ignoring the returned CAS token. If you're using gets, it's often because you intend to use the CAS token. If you don't need this, use get instead.

FAQs

Q: What do I do if the cas operation fails? A: cas can fail if the item was updated by another client between your calls to gets and cas. In this situation, it's common to retry the whole read-modify-write cycle.

Was this content helpful?

Start building today 

Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.