///////////////////////////////////////////////////////////////
 * 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/polygene/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/polygene/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.
