///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
///////////////////////////////////////////////////////////////

[[extension-cache-memcache, Memcache Cache]]
= Memcache Cache =

[devstatus]
--------------
source=extensions/cache-memcache/dev-status.xml
--------------


EntityStore cache backed by a Memcache server like http://memcached.org/[Memcached].

Memcached is an in-memory key-value store for small chunks of arbitrary data.
By default, entities serialized state must not exceed 1MB.

Other implementations such as https://www.memcachier.com/[MemCachier] have different peculiarities,
see their documentation.


include::../../build/docs/buildinfo/artifact.txt[]

Not all EntityStore implementations use the Cache extension, so check the implementation details of the
EntityStore whether the cache extension can bring any benefits or not.


== Assembly ==

Assembly is done using the +MemcacheAssembler+:

[snippet,java]
----
source=extensions/cache-memcache/src/test/java/org/apache/zest/cache/memcache/MemcacheCachePoolTest.java
tag=assembly
----


== Configuration ==

Here are the configuration properties for the Memcache EntityStore Cache:

[snippet,java]
----
source=extensions/cache-memcache/src/main/java/org/apache/zest/cache/memcache/MemcacheConfiguration.java
tag=config
----

As you can see both ASCII and binary flavours of the Memcache protocol are supported as well as SASL authentication.
