2009 Updated from JavaOne Session 2007 | Ehcache Architecture, Features and Usage Patterns Greg Luck Maintainer, ehcache - http://ehcache.sf.net Member, JSR 107 JCACHE Expert Group Chief Architect, Wotif.com - http://wotif.com
May 06, 2015
2009 Updated from JavaOne Session 2007 |
Ehcache Architecture, Features and Usage Patterns
Greg Luck
Maintainer, ehcache - http://ehcache.sf.net
Member, JSR 107 JCACHE Expert Group
Chief Architect, Wotif.com - http://wotif.com
2009 Updated from JavaOne Session 2007 | 2
Agenda
The Theory of CachingEhcache ArchitectureGeneral Purpose CachingWeb Caching Java Persistence API (JPA)/Hibernate CachingDistributed Caching for ClustersCache ServerStep-by-Step Coding Demo
Introduction
2009 Updated from JavaOne Session 2007 | 3
Introduction
● Since 2003● The most widely used Java platform Cache● Apache 2.0 License● Integrated by lots of projects, products● Hibernate Provider implemented 2003● Web Caching 2004● Distributed Caching 2006● JCACHE implementation 2007● Cache Server 2008
About Ehcache
2009 Updated from JavaOne Session 2007 | 4
How much faster will caching make an application?
The Theory of Caching
It depends on a multitude of factors being:● how many times a cached piece of data can and
is reused by the application● the proportion of the response time that is
alleviated by caching● In applications that are I/O bound, which is most
business applications, most of the response time is getting data from a database. Therefore the speed up mostly depends on how much reuse a piece of data gets.
2009 Updated from JavaOne Session 2007 | 5
Cache EfficiencyThe Theory of Caching
Factors which affect the efficiency of a cache are:● Required Liveness of Data● Proportion of total data cached● Read/Write ratio● Caching in a single VM versus Caching Clusters
2009 Updated from JavaOne Session 2007 | 6
How to calculate entire system speedup: Amdahl's LawThe Theory of Caching
Amdahl's law, after Gene Amdahl, is used to find the system speed up from a speed up in part of the system.
1/ ((1 - Proportion Sped Up) + Proportion Sped Up / Speed up)
Things to Watch:● For a web application the “system” should
include browser render time and network latency.
2009 Updated from JavaOne Session 2007 | 7
Speed up from a Web Page CacheThe Theory of Caching
Uncached page time: 2 seconds
Cache retrieval time: 2ms
Proportion: 100%
The expected server side system speedup is thus:
1 / ((1 - 1) + 1 / 1000)
= 1 / (0 + .001)
= 1000 times system speedup
The to the browser “system” speed up is much less
2009 Updated from JavaOne Session 2007 | 8
Speed up from a Database Level CacheThe Theory of Caching
Uncached page time: 2 seconds
Database time: 1.5 seconds
Cache retrieval time: 2ms
Proportion: 75% (1.5/2)
The expected system speedup is thus:
1 / ((1 - .75) + .75 / (1500/2)))
= 1 / (.25 + .75/750)
= 3.98 times system speedup
2009 Updated from JavaOne Session 2007 | 9
Architecture
2009 Updated from JavaOne Session 2007 | 10
General Purpose Caching
1.Add ehcache Java Archive (JAR) to your classpath
2.Place configuration in ehcache.xml and add it to your classpath
3.Create a CacheManagerCacheManager manager = CacheManager.create();
4.Reference a CacheEhcache sampleCache = manager.getCache();
5.Use itsampleCache.put(new Element(“key”, “value”));sampleCache.get(“key”);
Step by Step
2009 Updated from JavaOne Session 2007 | 11
Usage - General Purpose Caching
<ehcache>
<diskStore path="java.io.tmpdir"/>
...
<cache name="sampleCache1" maxElementsInMemory="10000" maxElementsOnDisk="1000" eternal="false" overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LFU" /></ehcache>
ehcache.xml Configuration
2009 Updated from JavaOne Session 2007 | 12
Step by StepWeb Caching
1.Use or Subclass SimpleCachingFilter or SimplePageFragmentCachingFilter
2.Configure filter in web.xml
3.Create a mapping in web.xml
4.Configure a cache entry matching the filter name
2009 Updated from JavaOne Session 2007 | 13
Example ScenarioWeb Caching
/index.jsp
/include/footer.jsp
2009 Updated from JavaOne Session 2007 | 14
Filter Configuration in web.xml
<filter><filter-name>SimplePageCachingFilter</filter-name><filter-class>net.sf.ehcache.constructs.web.filter.
SimplePageCachingFilter</filter-class>
</filter>
<filter-mapping> <filter-name>SimplePageCachingFilter</filter-name> <url-pattern>/index.jsp</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
Full Page Cache
2009 Updated from JavaOne Session 2007 | 15
Add Cache to Ehcache Configuration
<ehcache>
<diskStore path="java.io.tmpdir"/>
...
<cache name="SimplePageCachingFilter" maxElementsInMemory="10000" maxElementsOnDisk="1000" eternal="false" overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LFU" /></ehcache>
Full Page Cache
2009 Updated from JavaOne Session 2007 | 16
Filter Configuration in web.xml
<filter><filter-name>SimplePageFragmentCache</filter-name><filter-class>net.sf.ehcache.constructs.web.filter.
SimplePageFragmentCachingFilter</filter-class>
</filter>
<!-- Page Fragment Cache --><filter-mapping>
<filter-name>SimplePageFragmentCachingFilter</filter-name>
<url-pattern>/include/Footer.jsp</url-pattern> </filter-mapping>
Page Fragment Cache
2009 Updated from JavaOne Session 2007 | 17
OverviewJPA/Hibernate Caching
● Hibernate can either be used directly either or via the Hibernate Java Persistence API Provider in Hibernate 3.2
● Ehcache is a CacheProvider for Hibernate 2.x and 3.x
Example
● Simple Country persistent object/Entity
2009 Updated from JavaOne Session 2007 | 18
Step by StepJPA/Hibernate Caching
1.Configure Hibernate to use ehcache
2.Configure the Country object's cacheability. This can be done in a number of ways.
3.Decide whether to use defaults, or to configure specific cache settings for the Country object cache in ehcache.xml
2009 Updated from JavaOne Session 2007 | 19
Configure Hibernate to use ehcacheJPA/Hibernate Caching
hibernate.cache.provider_class=net.sf.ehcache.hibernate.EhCacheProvider
<!-- optional configuration file parameter -->net.sf.ehcache.configurationResourceName=/name_of_configuration_resource
Add the following to hibernate.properties
2009 Updated from JavaOne Session 2007 | 20
Native Hibernate Mapping File ConfigurationJPA/Hibernate Caching
<cache usage="transactional|read-write|nonstrict-read-write|read-only" region="RegionName" include="all|non-lazy" />
<hibernate-mapping>
<class name="com.somecompany.someproject.domain.Country" table="ut_Countries" dynamic-update="false" dynamic-insert="false">
<cache usage="read-write|nonstrict-read-write|read-only" /></class>...</hibernate-mapping>
2009 Updated from JavaOne Session 2007 | 21
Entity Configuration with JPA and Hibernate AnnotationsJPA/Hibernate Caching
@Entity...@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)public Class Country {
private String name;
...
}
2009 Updated from JavaOne Session 2007 | 22
FeaturesDistributed Caching for Clusters
1.Pluggable distribution mechanism.
2.RMI, JGroups and JMS replication modules. Terracotta also has an ehcache provider.
3.Multiple “clusters”
4.Replication set per Cache. Options:1.Replicate adds2.Replicate removes3.Replicate update by copy or invalidate4.Async or Sync
5.Bootstrapping from existing Caches in a cluster
2009 Updated from JavaOne Session 2007 | 23
Distributed Caching for ClustersArchitecture
2009 Updated from JavaOne Session 2007 | 24
RMI Based Replication Distributed Caching for Clusters
1.Multicast Peer Discovery<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446/>
2. RMI Listener<cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"properties="port=40001"/>
2009 Updated from JavaOne Session 2007 | 25
Set Replication Per CacheDistributed Caching for Clusters
<cache ...><cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true,
replicateUpdates=true,replicateUpdatesViaCopy=true,replicateRemovals=true,asynchronousReplicationIntervalMillis=1000"/>...
</cache>
2009 Updated from JavaOne Session 2007 | 26
Set Bootstrapping Per CacheDistributed Caching for Clusters
<cache ...><bootstrapCacheLoaderFactory class="
net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"/>
</cache>
2009 Updated from JavaOne Session 2007 | 27
REST and SOAP APIs
Supports HTTP/1.1 request pipelining
Deployed to a WAR or self-contained with Glassfish Embedded
Benefits over memcached:
•clients in any language
•may utilise HTTP load balancers
•servers are clustered using ehcache replication
Cache Server
2009 Updated from JavaOne Session 2007 | 28
ArchitectureCache Server
2009 Updated from JavaOne Session 2007 | 29
Ehcache in-process compared with Memcached(Ehcache server would be similar to memcached)
Cache Server
put/set get remove/delete0
1000
2000
3000
4000
5000
6000
7000
ehcache-1.2.4 memoryehcache-1.2.4 diskmemcached-1.2.1
2009 Updated from JavaOne Session 2007 | 30
Client coding examplesCache Server
import java.net.URL
import scala.io.Source.fromInputStream
object ExampleScalaGet extends Application {
val url = new URL("http://localhost:8080/ehcache/rest/sampleCache2/2")
fromInputStream(url.openStream).getLines.foreach(print) }
Scala
PHP<?php
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://localhost:8080/ehcache/rest/sampleCache2/3");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch); ?>
2009 Updated from JavaOne Session 2007 | 31
Summary
● Most apps will benefit from caching● You can calculate the speed up● Ehcache is a modern, modular family of caching
tools● You can also benefit from ehcache indirectly
through frameworks that use it● Distributed ehcache is a small configuration step● Cache Server is the new kid on the block
2009 Updated from JavaOne Session 2007 | 32
For More Information
● Project Website:http://ehcache.sf.net
● Downloadable Book:● http://www.lulu.com/content/paperback-
book/ehcache-150-guide-reference/3553390● My Email:
2009 Updated from JavaOne Session 2007 | 33
Q&AGreg [email protected]