| <?xml version="1.0"?> |
| <!-- |
| 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. |
| --> |
| |
| <document> |
| <properties> |
| <title>Java Caching System</title> |
| <author email="asmuts@apache.org">Aaron Smuts</author> |
| </properties> |
| |
| <body> |
| <section name="News: Version 1.3 is available"> |
| <p> |
| The Java Caching System, version 1.3 has been released. |
| This release is actually the first official release of JCS. |
| You can download it from the |
| <a href="DownloadPage.html">Download</a> page. |
| </p> |
| </section> |
| <section name="Java Caching System"> |
| <p> |
| JCS is a distributed caching system written in java. It |
| is intended to speed up applications by providing a |
| means to manage cached data of various dynamic natures. |
| Like any caching system, JCS is |
| <a href="UsingJCSBasicWeb.html">most useful</a> |
| for high read, low put applications. Latency times drop |
| sharply and bottlenecks move away from the database in |
| an effectively cached system. |
| <a href="getting_started/intro.html"> |
| Learn how to start using JCS. |
| </a> |
| </p> |
| <p> |
| The JCS goes beyond simply caching objects in memory. It |
| provides numerous additional features: |
| </p> |
| <ul> |
| <li>Memory management</li> |
| <li>Disk overflow (and defragmentation)</li> |
| <li>Thread pool controls</li> |
| <li>Element grouping</li> |
| <li>Minimal dependencies</li> |
| <li>Quick nested categorical removal</li> |
| <li>Data expiration (idle time and max life)</li> |
| <li>Extensible framework</li> |
| <li>Fully configurable runtime parameters</li> |
| <li>Region data separation and configuration</li> |
| <li>Fine grained element configuration options</li> |
| <li>Remote synchronization</li> |
| <li>Remote store recovery</li> |
| <li>Non-blocking "zombie" (balking facade) pattern</li> |
| <li> |
| Lateral distribution of elements via HTTP, TCP, or |
| UDP |
| </li> |
| <li>UDP Discovery of other caches</li> |
| <li>Element event handling</li> |
| <li> |
| Remote server chaining (or clustering) and failover |
| </li> |
| </ul> |
| <p> |
| JCS works on JDK versions 1.3 and up. It only has two |
| dependencies: Commons Logging and Doug Lea's Util |
| Concurrent. |
| </p> |
| </section> |
| |
| <section name="JCS is a Composite Cache"> |
| <p> |
| The foundation of JCS is the Composite Cache, which is |
| the |
| <a href="Plugins.html">pluggable</a> |
| controller for a cache region. Four types of caches can |
| be plugged into the Composite Cache for any given |
| region: (1) Memory, (2) Disk, (3) Lateral, and (4) |
| Remote. The Composite Cache orchestrates access to the |
| various caches configured for use in a region. |
| </p> |
| <p> |
| The JCS jar provides production ready implementations of |
| each of the four types of caches. In addition to the core |
| four, JCS also provides additional plugins of each type. |
| </p> |
| |
| <subsection name="LRU Memory Cache"> |
| <p> |
| The LRU Memory Cache is an extremely fast, highly |
| configurable |
| <a href="RegionProperties.html"> |
| memory cache |
| </a> |
| . It uses a Least Recently Used algorithm to manage |
| the number of items that can be stored in memory. |
| The LRU Memory Cache uses its own LRU Map |
| implementation that is significantly faster than |
| both the commons LRUMap implementation and the |
| LinkedHashMap that is provided with JDK1.4 up. This |
| makes JCS faster than its |
| <a href="JCSvsEHCache.html">competitors</a> |
| . |
| </p> |
| </subsection> |
| |
| <subsection name="Indexed Disk Cache"> |
| <p> |
| The |
| <a href="IndexedDiskAuxCache.html"> |
| Indexed Disk Cache |
| </a> |
| is a fast, reliable, and |
| <a href="IndexedDiskCacheProperties.html"> |
| highly configurable |
| </a> |
| swap for cached data. The indexed disk cache follows |
| the fastest pattern for disk swapping. Cache |
| elements are written to disk via a continuous |
| queue-based process. The length of the item is |
| stored in the first few bytes of the entry. The |
| offset is stored in memory and can be reference via |
| the key. When items are removed from the disk cache, |
| the location and size are recorded and reused when |
| possible. Every aspect of the disk cache is |
| configurable, and a thread pool can be used to |
| reduce the number of queue worker threads across the |
| system. |
| </p> |
| </subsection> |
| |
| <subsection name="TCP Lateral Cache"> |
| <p> |
| The |
| <a href="LateralTCPAuxCache.html"> |
| TCP Lateral Cache |
| </a> |
| provides an easy way to distribute cached data to |
| multiple servers. It comes with a |
| <a href="LateralUDPDiscovery.html">UDP discovery</a> |
| mechanism, so you can add nodes without having to |
| reconfigure the entire farm. The TCP Lateral Cache |
| works by establishing connections with socket server |
| running on other nodes. Each node maintains a |
| connection to every other. Only one server is needed |
| for any number of regions. The client is able to |
| re-establish connections if it looses its connection |
| with another server. The TCP Lateral is |
| <a href="LateralTCPProperties.html"> |
| highly configurable |
| </a> |
| . You can choose to only send data, to not look for |
| data on other servers, to send removes instead of |
| puts, and to filter removes based on hash codes. |
| </p> |
| </subsection> |
| |
| <subsection name="RMI Remote Cache"> |
| <p> |
| JCS also provides an RMI based |
| <a href="RemoteAuxCache.html"> |
| Remote Cache Server |
| </a> |
| . Rather than having each node connect to every |
| other node, you can use the remote cache server as |
| the connection point. Each node connects to the |
| remove server, which then broadcasts events to the |
| other nodes. To maintain consistency across a |
| cluster without incurring the overhead of |
| serialization, you can decide to send invalidation |
| messages to the other locals rather than send the |
| object over the wire. The remote cache server holds |
| a serialized version of your objects, so it does not |
| need to be deployed with your class libraries. The |
| remote servers can be chained and a list of failover |
| servers can be configured on the client. |
| </p> |
| </subsection> |
| </section> |
| |
| <section name="What JCS is not"> |
| <p> |
| JCS is not a tag library or a web specific application. |
| JCS is a general purpose caching system that can be used |
| in web applications, services, and stand alone Java |
| applications. |
| </p> |
| <p> |
| JCS is not a transactional distribution mechanism. |
| Transactional distributed caches are not scalable. JCS |
| is a cache not a database. The distribution mechanisms |
| provided by JCS can scale into the tens of servers. In a |
| well-designed service oriented architecture, JCS can be |
| used in a high demand service with numerous nodes. This |
| would not be possible if the distribution mechanism were |
| transactional. |
| </p> |
| <p> |
| JCS does not use AOP. JCS is a high performance, |
| non-invasive cache. It does not manipulate your objects |
| so it can just send a field or two fewer over the wire. |
| </p> |
| <p> |
| JCS is not a fork, an offshoot, a branch, or any other |
| derivation of JCS. Nor is JCS named after another |
| library. JCS is a mature project that has been under |
| development and in use since 2001. Over the years JCS |
| has encorporated numerous bug fixes and has added dozens |
| of features, making it the best designed and most |
| feature rich caching solution available. |
| </p> |
| </section> |
| |
| </body> |
| </document> |
| |