Memcache Examples

This page provides code examples in Java for using the low-level Memcache API. Memcache is a high-performance, distributed memory object caching system that provides fast access to cached data. To learn more about memcache, read the Memcache Overview.

Synchronous usage

Low-level API example using the synchronous MemcacheService:

@SuppressWarnings("serial") // With @WebServlet annotation the webapp/WEB-INF/web.xml is no longer required. @WebServlet(name = "MemcacheSync", description = "Memcache: Synchronous",  urlPatterns = "/memcache/sync") public class MemcacheSyncCacheServlet extends HttpServlet {  @Override  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException,  ServletException {  String path = req.getRequestURI();  if (path.startsWith("/favicon.ico")) {  return; // ignore the request for favicon.ico  }  MemcacheService syncCache = MemcacheServiceFactory.getMemcacheService();  syncCache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO));  String key = "count-sync";  byte[] value;  long count = 1;  value = (byte[]) syncCache.get(key);  if (value == null) {  value = BigInteger.valueOf(count).toByteArray();  syncCache.put(key, value);  } else {  // Increment value  count = new BigInteger(value).longValue();  count++;  value = BigInteger.valueOf(count).toByteArray();  // Put back in cache  syncCache.put(key, value);  }  // Output content  resp.setContentType("text/plain");  resp.getWriter().print("Value is " + count + "\n");  } }

Asynchronous usage

Low-level API example using AsyncMemcacheService:

AsyncMemcacheService asyncCache = MemcacheServiceFactory.getAsyncMemcacheService(); asyncCache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO)); String key = "count-async"; byte[] value; long count = 1; Future<Object> futureValue = asyncCache.get(key); // Read from cache. // ... Do other work in parallel to cache retrieval. try {  value = (byte[]) futureValue.get();  if (value == null) {  value = BigInteger.valueOf(count).toByteArray();  asyncCache.put(key, value);  } else {  // Increment value  count = new BigInteger(value).longValue();  count++;  value = BigInteger.valueOf(count).toByteArray();  // Put back in cache  asyncCache.put(key, value);  } } catch (InterruptedException | ExecutionException e) {  throw new ServletException("Error when waiting for future value", e); }

For more information on the low-level API, see the Memcache Javadoc.