<% set_title(product_name_long, "Reference") %>

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

*Reference* documents <%=vars.product_name_long%> properties, region attributes, the `cache.xml` file, cache memory requirements, and statistics.

-   **[gemfire.properties and gfsecurity.properties (<%=vars.product_name%> Properties)](../reference/topics/gemfire_properties.html)**

    You use the `gemfire.properties` settings to join a cluster and configure cluster member behavior. Cluster members include applications, the cache server, the locator, and other <%=vars.product_name%> processes.

-   **[cache.xml](../reference/topics/chapter_overview_cache_xml.html)**

    Use the cache.xml file to set up general cache facilities and behavior and to create and initialize cached data regions. These sections document cache.xml requirements; provide hierarchical diagrams of `<cache>` and `<client-cache>      `elements; and describe the function of each element.

-   **[Region Shortcuts](../reference/topics/chapter_overview_regionshortcuts.html)**

    This topic describes the various region shortcuts you can use to configure <%=vars.product_name%> regions.

-   **[Exceptions and System Failures](../reference/topics/handling_exceptions_and_failures.html)**

    Your application needs to catch certain classes to handle all the exceptions and system failures thrown by <%=vars.product_name_long%>.

-   **[Memory Requirements for Cached Data](../reference/topics/memory_requirements_for_cache_data.html)**

    <%=vars.product_name%> solutions architects need to estimate resource requirements for meeting application performance, scalability and availability goals.

-   **[<%=vars.product_name%> Statistics List](statistics_list.html)**

    This section describes the primary statistics gathered by <%=vars.product_name%> when statistics are enabled.


