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 .