Java 8은 지원이 종료되었으며 2026년 1월 31일에 지원 중단됩니다. 지원 중단 후에는 조직에서 이전에 조직 정책을 사용하여 레거시 런타임의 배포를 다시 사용 설정한 경우에도 Java 8 애플리케이션을 배포할 수 없습니다. 기존 Java 8 애플리케이션은 지원 중단 날짜 이후에도 계속 실행되고 트래픽을 수신합니다. 지원되는 최신 Java 버전으로 마이그레이션하는 것이 좋습니다.
이 페이지는 하위 Memcache API를 사용하기 위한 자바의 코드 예시를 제공합니다. Memcache는 캐시된 데이터에 빠르게 액세스할 수 있는 고성능 분산 메모리 객체 캐싱 시스템입니다. Memcache에 대한 자세한 내용은 Memcache 개요를 참조하세요.
동기 사용
동기 MemcacheService를 사용하는 하위 API 예시:
@SuppressWarnings("serial")// With @WebServlet annotation the webapp/WEB-INF/web.xml is no longer required.@WebServlet(name="MemcacheSync",description="Memcache: Synchronous",urlPatterns="/memcache/sync")publicclassMemcacheSyncCacheServletextendsHttpServlet{@OverridepublicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsIOException,ServletException{Stringpath=req.getRequestURI();if(path.startsWith("/favicon.ico")){return;// ignore the request for favicon.ico}MemcacheServicesyncCache=MemcacheServiceFactory.getMemcacheService();syncCache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO));Stringkey="count-sync";byte[]value;longcount=1;value=(byte[])syncCache.get(key);if(value==null){value=BigInteger.valueOf(count).toByteArray();syncCache.put(key,value);}else{// Increment valuecount=newBigInteger(value).longValue();count++;value=BigInteger.valueOf(count).toByteArray();// Put back in cachesyncCache.put(key,value);}// Output contentresp.setContentType("text/plain");resp.getWriter().print("Value is "+count+"\n");}}
비동기 사용
AsyncMemcacheService를 사용하는 하위 API 예시:
AsyncMemcacheServiceasyncCache=MemcacheServiceFactory.getAsyncMemcacheService();asyncCache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO));Stringkey="count-async";byte[]value;longcount=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 valuecount=newBigInteger(value).longValue();count++;value=BigInteger.valueOf(count).toByteArray();// Put back in cacheasyncCache.put(key,value);}}catch(InterruptedException|ExecutionExceptione){thrownewServletException("Error when waiting for future value",e);}
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["이해하기 어려움","hardToUnderstand","thumb-down"],["잘못된 정보 또는 샘플 코드","incorrectInformationOrSampleCode","thumb-down"],["필요한 정보/샘플이 없음","missingTheInformationSamplesINeed","thumb-down"],["번역 문제","translationIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-09-04(UTC)"],[[["\u003cp\u003eThis page offers Java code examples for utilizing the low-level Memcache API, which is a high-speed, distributed memory caching system for efficient data access.\u003c/p\u003e\n"],["\u003cp\u003eThe provided code demonstrates both synchronous usage with \u003ccode\u003eMemcacheService\u003c/code\u003e and asynchronous usage with \u003ccode\u003eAsyncMemcacheService\u003c/code\u003e for interacting with the cache.\u003c/p\u003e\n"],["\u003cp\u003eThis legacy bundled API is exclusive to first-generation runtimes within the App Engine standard environment, and migration to newer Java environments like Java 11/17 requires review of the provided migration guide.\u003c/p\u003e\n"],["\u003cp\u003eThe examples show how to get, set and increment values in the cache, demonstrating basic operations using the Memcache API.\u003c/p\u003e\n"]]],[],null,["# Memcache Examples\n\nThis page provides code examples in Java for using the\n[low-level Memcache API](/appengine/docs/legacy/standard/java/memcache#Java_Caching_data_with_the_Low-Level_API). Memcache\nis a high-performance, distributed memory object caching system that provides\nfast access to cached data. To learn more about memcache, read the\n[Memcache Overview](/appengine/docs/legacy/standard/java/memcache).\n| This page describes how to use the legacy bundled services and APIs. This API can only run in first-generation runtimes in the App Engine standard environment. If you are updating to the App Engine Java 11/17 runtime, refer to the [migration guide](/appengine/migration-center/standard/migrate-to-second-gen/java-differences) to learn about your migration options for legacy bundled services.\n\n\u003cbr /\u003e\n\nSynchronous usage\n-----------------\n\nLow-level API example using the synchronous `MemcacheService`: \n\n @SuppressWarnings(\"serial\")\n // With @WebServlet annotation the webapp/WEB-INF/web.xml is no longer required.\n @WebServlet(name = \"MemcacheSync\", description = \"Memcache: Synchronous\",\n urlPatterns = \"/memcache/sync\")\n public class MemcacheSyncCacheServlet extends HttpServlet {\n\n @Override\n public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException,\n ServletException {\n String path = req.getRequestURI();\n if (path.startsWith(\"/favicon.ico\")) {\n return; // ignore the request for favicon.ico\n }\n\n MemcacheService syncCache = MemcacheServiceFactory.getMemcacheService();\n syncCache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO));\n String key = \"count-sync\";\n byte[] value;\n long count = 1;\n value = (byte[]) syncCache.get(key);\n if (value == null) {\n value = BigInteger.valueOf(count).toByteArray();\n syncCache.put(key, value);\n } else {\n // Increment value\n count = new BigInteger(value).longValue();\n count++;\n value = BigInteger.valueOf(count).toByteArray();\n // Put back in cache\n syncCache.put(key, value);\n }\n\n // Output content\n resp.setContentType(\"text/plain\");\n resp.getWriter().print(\"Value is \" + count + \"\\n\");\n }\n }\n\nAsynchronous usage\n------------------\n\nLow-level API example using `AsyncMemcacheService`: \n\n AsyncMemcacheService asyncCache = MemcacheServiceFactory.getAsyncMemcacheService();\n asyncCache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO));\n String key = \"count-async\";\n byte[] value;\n long count = 1;\n Future\u003cObject\u003e futureValue = asyncCache.get(key); // Read from cache.\n // ... Do other work in parallel to cache retrieval.\n try {\n value = (byte[]) futureValue.get();\n if (value == null) {\n value = BigInteger.valueOf(count).toByteArray();\n asyncCache.put(key, value);\n } else {\n // Increment value\n count = new BigInteger(value).longValue();\n count++;\n value = BigInteger.valueOf(count).toByteArray();\n // Put back in cache\n asyncCache.put(key, value);\n }\n } catch (InterruptedException | ExecutionException e) {\n throw new ServletException(\"Error when waiting for future value\", e);\n }\n\nFor more information on the low-level API, see the\n[Memcache Javadoc](/appengine/docs/legacy/standard/java/javadoc/com/google/appengine/api/memcache/package-summary)."]]