---
title:  Tools and Modules
---

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

*Tools and Modules* describes tools and modules associated with <%=vars.product_name_long%>.

<a id="deploy_run__section_tool_intro"></a>

-   **[gfsh](gfsh/chapter_overview.html)**

    `gfsh` (pronounced "jee-fish") provides a single, powerful command-line interface from which you can launch, manage, and monitor <%=vars.product_name%> processes, data, and applications.

-   **[Gemcached](gemcached/chapter_overview.html)**

    Gemcached is a <%=vars.product_name%> adapter that allows Memcached clients to communicate with a <%=vars.product_name%> server cluster, as if the servers were memcached servers. Memcached is an open-source caching solution that uses a distributed, in-memory hash map to store key-value pairs of string or object data.

-   **[HTTP Session Management Modules](http_session_mgmt/chapter_overview.html)**

    The <%=vars.product_name_long%> HTTP Session Management modules provide fast, scalable, and reliable session replication for HTTP servers without requiring application changes.

-   **[<%=vars.product_name%> Pulse](pulse/pulse-overview.html)**

    <%=vars.product_name%> Pulse is a Web Application that provides a graphical dashboard for monitoring vital, real-time health and performance of <%=vars.product_name%> clusters, members, and regions.

-   **[<%=vars.product_name%> Redis Adapter](redis_adapter.html)**

    The <%=vars.product_name%> Redis adapter allows <%=vars.product_name%> to function as a drop-in replacement for a Redis data store, letting Redis applications take advantage of <%=vars.product_name%>’s scaling capabilities without changing their client code. Redis clients connect to a <%=vars.product_name%> server in the same way they connect to a Redis server, using an IP address and a port number.


-   **[Apache Lucene&reg; Integration](lucene_integration.html)**

    The Apache Lucene&reg; integration enables users to create Lucene indexes and execute Lucene searches on data stored in <%=vars.product_name%>.

