---
title:  Deploying and Configuring a Gemcached Server
---

<!--
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.
-->

You can configure and deploy Gemcached servers in a Java class or by using the gfsh command-line interface.

The following sections describe how to configure and deploy an embedded Gemcached server. You can configure and start a GemCached server either by invoking a Java class that calls the cache server's `start()` method, or by starting the cache server using the gfsh command line.

## <a id="topic_7B158074B27A4FEF9D38E7C369905C72__section_17E7E4058D914334B9C5AC2E3DC1F7F2" class="no-quick-link"></a>Embedding a Gemcached server in a <%=vars.product_name%> Java Application

The `org.apache.geode.memcached` package contains a single class, `GemFireMemcachedServer` (see the <%=vars.product_name%> Javadocs.) Use this class to configure and embed a Gemcached server in a <%=vars.product_name%> cache server. For example, the following statement creates and starts an embedded Gemcached server on port number 5555 using the binary protocol:

``` pre
GemFireMemcachedServer server = 
  new GemFireMemcachedServer(5555, Protocol.BINARY);server.start(); 
          
```

**Note:**
By default, Gemcached servers use the ASCII protocol.

When you start a Gemcached server, by default, it creates a `RegionShortcut.PARTITION` region named `gemcached` where data used by memcached clients is stored. You can alter these defaults by configuring the region using the `cache.xml` or `gemfire.properties` files. See [Distributed System and Cache Configuration](../../basic_config/config_concepts/chapter_overview.html).

## <a id="topic_7B158074B27A4FEF9D38E7C369905C72__section_58A3FFED5BBB4F92A79FBD50421DC3F3" class="no-quick-link"></a>Starting a Gemcached Server Using a gfsh Command

You can also start a Gemcached server with the gfsh command-line interface. Use the following syntax:

``` pre
gfsh>start server 
  --name=<server_name> 
  --server-port=<port_number> 
  --memcached-port=<port_number>
  --memcached-protocol=BINARY|ASCII
```

**Note:**
You can also set the memcached port number and protocol in the `gemfire.properties` file.

If the `memcached-port` property is not specified, the embedded Gemcached server is not started.

## <a id="topic_7B158074B27A4FEF9D38E7C369905C72__section_E5587FE56A21424FBAEE8CF61DF34219" class="no-quick-link"></a>Configuring a Gemcached Server with the gemfire.properties File

You can set the following properties in the `gemfire.properties` file that are used when starting Gemcached servers:

<a id="topic_7B158074B27A4FEF9D38E7C369905C72__table_3F586259E06E42C4BD82AD661B3AFEA4"></a>

<table>
<caption><span class="tablecap">Table 1. Gemcached Properties</span></caption>
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead>
<tr class="header">
<th><p>Property</p></th>
<th><p>Description</p></th>
</tr>
</thead>
<tbody>
<tr>
<td><code class="ph codeph">memcached-port</code></td>
<td><p>The port number where the Gemcached server listens for connections from memcached clients.</p>
<p>If the port number is set to 0 or the <code class="ph codeph">memcached-port</code> parameter is omitted, the Gemcached server does not start.</p></td>
</tr>
<tr>
<td><code class="ph codeph">memcached-protocol</code></td>
<td><p>Memcached supports both ASCII and binary communication protocols. 
(See <a href="https://github.com/memcached/memcached/blob/master/doc/protocol.txt">Memcached protocol</a> By default, Gemcached uses the ASCII protocol.</p>
<p>Set one of the following values:</p>
<ul>
<li><code class="ph codeph">ASCII</code> (default)</li>
<li><code class="ph codeph">BINARY</code></li>
</ul></td>
</tr>
</tbody>
</table>

<span class="tablecap">Table 1. Gemcached Properties</span>


