Esempi di Memcache

Questa pagina fornisce esempi di codice in Java per l'utilizzo dell'API Memcache di basso livello. Memcache è un sistema distribuito ad alte prestazioni di memorizzazione nella cache di oggetti di memoria che fornisce un accesso rapido ai dati memorizzati nella cache. Per saperne di più su memcache, leggi la panoramica di Memcache.

Utilizzo sincrono

Esempio di API di basso livello utilizzando il modello sincrono 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");
  }
}

Utilizzo asincrono

Esempio di API di basso livello utilizzando 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);
}

Per ulteriori informazioni sull'API di basso livello, consulta il documento Memcache Javadoc.