Contoh Memcache

Halaman ini menyediakan contoh kode dalam Java untuk menggunakan Memcache API level rendah. Memcache adalah sistem caching objek memori terdistribusi berperforma tinggi yang menyediakan akses cepat ke data yang di-cache. Untuk mempelajari memcache lebih lanjut, baca Ringkasan Memcache.

Penggunaan sinkron

Contoh API tingkat rendah yang menggunakan MemcacheService sinkron:

@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");
  }
}

Penggunaan asinkron

Contoh API tingkat rendah yang menggunakan 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);
}

Untuk informasi selengkapnya tentang API level rendah, lihat Javadoc Memcache.