SlideShare a Scribd company logo
Caching with Spring: Advanced Topics 
and Best Practices 
© 2014 SpringOne 2GX. All rights reserved. Do not distribute without permission. 
Michael Plöd 
@bitboss
I will talk about 
Caching Types / Topologies 
Best Practices for Caching in Enterprise Applications 
Caching with Spring 
JCache and Spring 
I will NOT talk about 
Latency / Synchronization discussion 
What is the best caching product on the market 
HTTP / Database Caching 
Caching in JPA, Hibernate or other ORMs
Cache! 
/ kæʃ /! 
In computing, a cache is a component that transparently stores data so that future requests 
for that data can be served faster. The data that is stored within a cache might be values that 
have been computed earlier or duplicates of original values that are stored elsewhere. If 
requested data is contained in the cache (cache hit), this request can be served by simply 
reading the cache, which is comparatively faster. Otherwise (cache miss), the data has to be 
recomputed or fetched from its original storage location, which is comparatively slower. Hence, 
the greater the number of requests that can be served from the cache, the faster the overall 
system performance becomes. 
Source: http://en.wikipedia.org/wiki/Cache_(computing)
That’s awesome. Let’s cache everything 
and everywhere and distribute it all in 
a Cluster in a transactional manner 
ohhh by the way: Twitter has been 
doing that for ages 
Are you 
crazy?
Business-Applications 
!= 
Twitter / Facebook & co.
Many enterprise grade projects 
are adapting caching too 
defensive or too offensive and are 
running into consistency or 
performance issues because of 
that
But with a well adjusted caching 
strategy you will make your 
application more scalable, faster 
and cheaper to operate.
Local Cache, Data Grid, Document Store, JPA 
First Level Cache, JPA Second Level Cache, 
Types of Places CACHES 
for 
Hybrid Cache 
Database, Heap, HTTP Proxy, Browser, 
Prozessor, Disk, Off Heap, Persistence- 
Framework, Application
We will focus on local and 
distributed caching at the 
application level with the Spring 
Framework
Which data shall I 
cache? 
Which cache shall I use? 
Where shall I cache? 
Which impact does it have on my 
infrastructure 
How about data-consistency 
How do I introduce 
caching? 
How about caching in 
Spring?
Which data shall I 
cache? 
Which cache shall I use? 
Where shall I cache? 
Which impact does it have on my 
infrastructure 
How about data-consistency 
How do I introduce 
caching? 
How about caching in 
Spring?
1 Identify suitable layers for 
caching
ComplaintManagementRestController 
ComplaintManagementBusinessService 
DataAggrgationManager 
Host! 
Commands 
SAP! 
Commands 
Spring Data 
Repository 
HTTP 
Caching 
Read 
Operations 
Read 
Operations 
Read 
Operations 
Read 
Operations 
Read and 
Write 
Operations 
Suitable 
Layers 
for 
Caching
2 Stay local as long as possible
Lokal In-Memory 
JVM 
Cache
Clustered 
JVM 
Cache 
JVM 
Cache 
JVM 
Cache 
JVM 
Cache
Which data shall I 
cache? 
Which cache shall I use? 
Where shall I cache? 
Which impact does it have on my 
infrastructure 
How about data-consistency 
How do I introduce 
caching? 
How about caching in 
Spring?
Clustered - with sync 
JVM 
JVM 
JVM 
JVM 
Cache 
Cache 
Cache 
Cache
Clustered - with sync 
JVM 
JVM 
JVM 
JVM 
Cache 
Cache 
Cache 
Cache 
Invalidation 
Replication
3 Avoid real replication where 
possible
Invalidation - Option 1 
Cache 
Cache 
Cache 
Cache
Invalidation - Option 1 
Cache 
Cache 
Cache 
#1 
Cache 
PUT 
(Insert) 
PUT 
(Insert) #1 
#1 
PUT 
(Insert) 
PUT 
(Insert) #1
Invalidation - Option 1 
Cache 
#1 #1 
Cache 
Cache 
Cache 
#1 #1
Invalidation - Option 1 
Cache 
#1 #1 
Cache 
Cache 
Cache 
PUT 
(Update) #1 #1
Invalidation - Option 1 
Cache 
Cache 
Cache 
Cache 
PUT 
(Update) #1
Invalidation - Option 2 
Cache 
Cache 
Cache 
Cache
Invalidation - Option 2 
Cache 
Cache 
Cache 
Cache 
PUT 
(Insert) #1
Replication 
Cache 
Cache 
Cache 
Cache
Replication 
Cache 
Cache 
Cache 
#1 
Cache 
#1 
#1 #1 
PUT 
(Insert)
Replication 
Cache 
Cache 
Cache 
#1 
Cache 
#1 
#1 #1
Replication 
Cache 
Cache 
Cache 
#1 
Cache 
#1 
#1 #1 
PUT 
(Update)
As of now every cache could 
potentially hold every data which 
consumes heap memory
Big Heap 
?
Which data shall I 
cache? 
Which cache shall I use? 
Where shall I cache? 
Which impact does it have on my 
infrastructure 
How about data-consistency 
How do I introduce 
caching? 
How about caching in 
Spring?
4 Avoid big heaps just for caching
Big heap 
leads to long 
major GCs 
Cache 
Application 
Data 
32 GB
Long GCs can destabilize your 
cluster 
JVM 
Cache 
JVM 
Cache 
JVM 
Cache 
JVM 
Cache
Small caches 
are a bad idea! 
" 
Many evictions, fewer hits, 
no „hot data“. 
This is especially critical for 
replicating caches.
5 Use a distributed cache for 
big amounts of data
Distributed Caches 
JVM 
JVM 
JVM JVM 
Cache Node 
1 
Cache Node 
2 
Cache Node 
3
1 
Customer 
#23 
Customer 
#30 
Customer 
#27 
Customer 
#32
1 2 
Customer 
#23 
Customer 
#30 
Customer 
#27 
Customer 
#32 
BACKUP 
#27 
BACKUP 
#32 
BACKUP 
#23 
BACKUP 
#30 
Data is being 
distributed and 
backed up
1 2 
3 
Customer 
#23 
Customer 
#30 
Customer 
#27 
Customer 
#32 
BACKUP 
#27 
BACKUP 
#32 
BACKUP 
#23 
BACKUP 
#30
1 2 
Customer 
#23 
3 4 
Customer 
#30 
Customer 
#27 
Customer 
#32 
BACKUP 
#27 
BACKUP 
#32 
BACKUP 
#23 
BACKUP 
#30
DEMO 
Hazelcast
A distributed cache leads to 
smaller heaps, more capacity and 
is easy to scale 
Application 
Data 
Cache 
2 - 4 GB 
… Cache
6 The operations specialist is 
your new best friend
Clustered caches are 
complex. Please make 
sure that operations 
and networking are 
involved as early as 
possible.
Which data shall I 
cache? 
Which cache shall I use? 
Where shall I cache? 
Which impact does it have on my 
infrastructure 
How about data-consistency 
How do I introduce 
caching? 
How about caching in 
Spring?
7 Make sure that only suitable 
data gets cached
The best cache candidates are 
read-mostly data, which are 
expensive to obtain
If you urgently must cache write-intensive 
data make sure to use a 
distributed cache and not a 
replicated or invalidating one
Which data shall I 
cache? 
Which cache shall I use? 
Where shall I cache? 
Which impact does it have on my 
infrastructure 
How about data-consistency 
How do I introduce 
caching? 
How about caching in 
Spring?
8 Only use existing cache 
implementations
NEVER 
write your own cache 
implementation 
EVER
Infinispan, EHCache, Hazelcast, Couchbase, 
Memcache, OSCache, SwarmCache, Xtreme 
Cache, Apache DirectMemory 
CACHE 
Implementations 
Terracotta, Coherence, Gemfire, Cacheonix, 
WebSphere eXtreme Scale, Oracle 12c In 
Memory Database
Which data shall I 
cache? 
Which cache shall I use? 
Where shall I cache? 
Which impact does it have on my 
infrastructure 
How about data-consistency 
How do I introduce 
caching? 
How about caching in 
Spring?
9 Introduce Caching in three 
steps
Optimize your 
application 
Local Cache Distributed Cache 
Performance 
Boost 
Performance 
Loss
10 Optimize Serialization
Example: Hazelcast 
putting and getting 10.000 objects locally 
GET Time PUT Time Payload Size 
Serializable ? ? ? 
Data 
Serializable ? ? ? 
Identifier 
Data 
Serializable 
? ? ?
DEMO 
Serialization
Example: Hazelcast 
putting and getting 10.000 objects locally 
GET Time PUT Time Payload Size 
Serializable 1287 ms 1220 ms 1164 byte 
Data 
Serializable 443 ms 408 ms 916 byte 
Identifier 
Data 
Serializable 
264 ms 207 ms 882 byte
JAVA 
SERIALIZATION 
SUCKS for Caching if alternatives are present
11 Use Off-Heap Storage for 
Cache instances with more 
than 4 GB Heap Size
Off Heap 
30 GB RAM 
No Garbage Collection 
JVM 
Cache Runtime 
Cache 
Data 
2 GB HEAP 
Very short Garbage 
Collections
12 Mind the security gap
Application 
Security Security Security 
„CRM“ „Host“ DB 
Cache 
CRM Data 
SAP Data 
DB Data 
? 
Mind security when reading 
data from the cache
I <3 Spring 
" 
Bot 
censored 
I’m at a Spring 
conference 
and this guy is 50 
slides in and hasn’t 
yet mentioned Spring 
even if he advertised
13 Abstract your cache 
provider
Tying your code to a cache provider is bad practice 
public Account retrieveAccount(String accountNumber) 
{! 
Cache cache = ehCacheMgr.getCache(„accounts“);! 
Account account = null;! 
Element element = cache.get(accountNumber);! 
if(element == null) {! 
//execute some business logic for retrieval! 
//account = result of logic above! 
cache.put(new Element(accountNumber, account));! 
} else {! 
account = (Account)element.getObjectValue();! 
}! 
return account;! 
}
Try switching from EHCache to Hazelcast 
public Account retrieveAccount(String accountNumber) 
{! 
Cache cache = ehCacheMgr.getCache(„accounts“);! 
Account account = null;! 
Element element = cache.get(accountNumber);! 
if(element == null) {! 
//execute some business logic for retrieval! 
//account = result of logic above! 
cache.put(new Element(accountNumber, account));! 
} else {! 
account = (Account)element.getObjectValue();! 
}! 
return account;! 
} 
You will 
have to 
adjust these 
lines of code 
to the 
Hazelcast 
API
You can’t switch cache providers between 
environments 
public Account retrieveAccount(String accountNumber) 
{! 
Cache cache = ehCacheMgr.getCache(„accounts“);! 
Account account = null;! 
Element element = cache.get(accountNumber);! 
if(element == null) {! 
//execute some business logic for retrieval! 
//account = result of logic above! 
cache.put(new Element(accountNumber, account));! 
} else {! 
account = (Account)element.getObjectValue();! 
}! 
return account;! 
} 
EHCache is 
tightly 
coupled to 
your code
You mess up your business logic with 
infrastructure 
public Account retrieveAccount(String accountNumber) 
{! 
Cache cache = ehCacheMgr.getCache(„accounts“);! 
Account account = null;! 
Element element = cache.get(accountNumber);! 
if(element == null) {! 
//execute some business logic for retrieval! 
//account = result of logic above! 
cache.put(new Element(accountNumber, account));! 
} else {! 
account = (Account)element.getObjectValue();! 
}! 
return account;! 
} 
This is all 
caching 
related code 
without any 
business 
relevance
Introducing Spring’s cache abstraction 
<cache:annotation-driven cache-manager="ehCacheManager"/>! 
" 
<!-- EH Cache local -->! 
<bean id="ehCacheManager" 
! class="org.springframework.cache.ehcache.EhCacheCacheManager"! 
p:cacheManager-ref="ehcache"/>! 
! ! 
<bean id="ehcache" 
! class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"! 
! p:configLocation="/ehcache.xml"/> 
@Cacheable("Customers")! 
public Customer getCustomer(String customerNumber) {! 
! …! 
}
Spring’s Caching Annotations 
Annotation Description 
@Cacheable Demarcates cachable methods, can read and write to the cache(s) 
@CacheEvict Demarcates methods that perform cache eviction, that is methods that 
act as triggers for removing data from the cache. 
@CachePut Updates the cache with the annotated method’s return value. Will always 
execute the method. 
@Caching Allows multiple nested @Cacheable, @CacheEvict and @CachePut 
annotations to be used on the same method 
@CacheConfig 
Class-level annotation that allows to share the cache names, the custom 
KeyGenerator, the custom CacheManager and finally the custom 
CacheResolver. Does not enable caching.
Default Key Generation Strategy 
Annotation Key 
@Cacheable("Customers")! 
public Customer getCustomer(String customerNumber) {! 
! …! 
} 
@Cacheable("CustomerList")! 
public List<Customer> listCustomers(int start, int count) {! 
! …! 
} 
@Cacheable("MonthlyReport")! 
public Report getMonthlyReport() {! 
! …! 
} 
customerNumber 
SimpleKey containing 
start and count 
SimpleKey.EMPTY
public class MyOwnKeyGenerator implements KeyGenerator {! 
@Override! 
public Object generate(Object target, Method method, Object... params) {! 
if (params.length == 0) {! 
return new SimpleKey("EMPTY");! 
}! 
if (params.length == 1) {! 
Object param = params[0];! 
if (param != null && !param.getClass().isArray()) {! 
return param;! 
}! 
}! 
return new SimpleKey(params);! 
}! 
} 
You need a custom default KeyGenerator? 
<cache:annotation-driven cache-manager="hazelcastCacheManager" 
keyGenerator="myOwnKeyGenerator" />
SpEL in Caching Annotations 
Annotation Effect 
@Cacheable("concerts", key="#location.id")! 
public List<Concert> findConcerts(Location location) 
@Cacheable("concerts", 
key="T(someType).hash(#location)")! 
public List<Concert> findConcerts(Location location) 
@Cacheable("concerts", 
condition="#location.city == 'Dallas')", 
unless="#location.outOfBusiness")! 
public List<Concert> findConcerts(Location location) 
Key: id of location 
@CachePut("locations", key="#result.id")! 
public Location saveLocation(Location location) 
Key: hashCode of location 
Conditional Caching if Location 
is in Dallas in operating 
Key: generated id of result
I have multiple Caches 
and Cache Managers! 
@Cacheable("concerts", cacheManager="hazelCastCacheManager")! 
public List<Concert> findConcerts(Location location) 
@Cacheable("bands", cacheManager="gemfireCacheManager"))! 
public List<Band> listBand(int start, int count) 
@Cacheable("bands", cacheResolver="myOwnCacheResolver"))! 
public List<Band> listBand(int start, int count) 
Programmatic resolution through an 
implementation of the CacheResolver Interface 
Manual 
Assignment 
Manual 
Assignment
public class MyOwnCacheResolver extends AbstractCacheResolver {! 
@Autowired 
public MyOwnCacheResolver(CacheManager cacheManager) { 
super(cacheManager); 
} 
protected Collection<String> getCacheNames(CacheOperationInvocationContext<?> context) {! 
return getCacheNames(context.getTarget().getClass());! 
}! 
" 
private getCacheNames(Class<?> businessServiceClass) { 
... 
}! 
} 
Working with CacheResolvers 
@Cacheable("bands", cacheResolver="myOwnCacheResolver"))! 
public List<Band> listBand(int start, int count)
You can use your own custom Annotations 
@Retention(RetentionPolicy.RUNTIME)! 
@Target({ElementType.METHOD})! 
@Cacheable("concerts", key="id")! 
public @interface DefaultConcertCacheable {! 
} 
@DefaultConcertCacheable! 
public Concert getConcert(Long id)
Spring 4.x is the first 
commerically supported 
container with JCache 
(JSR-107) Support! 
That’s years ahead 
of 
any JEE Server
Spring vs JCache Annotations 
Spring JCache Description 
@Cacheable @CacheResult Similar, but @CacheResult can cache Exceptions and force 
method execution 
@CacheEvict @CacheRemove Similar, but @CacheRemove supports eviction in the case of 
Exceptions 
@CacheEvict 
(removeAll=true) @CacheRemoveAll Same rules as for @CacheEvict vs @CacheRemove 
@CachePut @CachePut 
Different semantic: cache content must be annotated with 
@CacheValue. JCache brings Exception caching and caching 
before or after method execution 
@CacheConfig @CachePut Identical
Except for the dependencies 
JCache API and spring-context-support 
no further steps need to 
be taken to enable JCache 
Annotations in Spring 
Applications
? 
Your Cache Provider has no 
integration for Spring or JCache
Code 
Walkthrough 
CacheManager & Cache API
How do I disable 
caching for Unit Tests? 
<bean id="cacheManager" 
class="org.springframework.cache.support.CompositeCacheManager">! 
<property name="cacheManagers">! 
<list>! 
<ref bean="guavaCache"/>! 
<ref bean="ehCache"/>! 
</list>! 
</property>! 
<property name="fallbackToNoOpCache" value="true"/>! 
</bean>
Thank you! 
82 
Michael Plöd - Freelance Consultant 
https://github.com/mploed 
@bitboss 
http://slideshare.net/mploed

More Related Content

What's hot

Spring Caches with Protocol Buffers
Spring Caches with Protocol BuffersSpring Caches with Protocol Buffers
Spring Caches with Protocol Buffers
VMware Tanzu
 
Saying Hello to Bug Bounty
Saying Hello to Bug BountySaying Hello to Bug Bounty
Saying Hello to Bug Bounty
Null Bhubaneswar
 
Event-sourced architectures with Akka
Event-sourced architectures with AkkaEvent-sourced architectures with Akka
Event-sourced architectures with Akka
Sander Mak (@Sander_Mak)
 
Visitor Pattern
Visitor PatternVisitor Pattern
Visitor Pattern
Ider Zheng
 
OWASP Mobile Top 10 Deep-Dive
OWASP Mobile Top 10 Deep-DiveOWASP Mobile Top 10 Deep-Dive
OWASP Mobile Top 10 Deep-Dive
Prathan Phongthiproek
 
Transactions and Concurrency Control Patterns
Transactions and Concurrency Control PatternsTransactions and Concurrency Control Patterns
Transactions and Concurrency Control Patterns
J On The Beach
 
Proxy Pattern
Proxy PatternProxy Pattern
Proxy Pattern
Hüseyin Ergin
 
Proxy pattern
Proxy patternProxy pattern
Proxy pattern
Shakil Ahmed
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
NexThoughts Technologies
 
Security Vulnerabilities
Security VulnerabilitiesSecurity Vulnerabilities
Security Vulnerabilities
Marius Vorster
 
Hexagonal architecture
Hexagonal architectureHexagonal architecture
Hexagonal architecture
Nicolas Guignard
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring Boot
Mikalai Alimenkou
 
Java ee 8 + security overview
Java ee 8 + security overviewJava ee 8 + security overview
Java ee 8 + security overview
Rudy De Busscher
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring Cloud
Eberhard Wolff
 
Memcache basics on google app engine
Memcache basics on google app engineMemcache basics on google app engine
Memcache basics on google app engine
Ido Green
 
Brownfield Domain Driven Design
Brownfield Domain Driven DesignBrownfield Domain Driven Design
Brownfield Domain Driven Design
Nicolò Pignatelli
 
The Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudThe Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring Cloud
VMware Tanzu
 
Integration testing for microservices with Spring Boot
Integration testing for microservices with Spring BootIntegration testing for microservices with Spring Boot
Integration testing for microservices with Spring Boot
Oleksandr Romanov
 
Microservices architecture overview v2
Microservices architecture overview v2Microservices architecture overview v2
Microservices architecture overview v2
Dmitry Skaredov
 
Singleton design pattern
Singleton design patternSingleton design pattern
Singleton design pattern
11prasoon
 

What's hot (20)

Spring Caches with Protocol Buffers
Spring Caches with Protocol BuffersSpring Caches with Protocol Buffers
Spring Caches with Protocol Buffers
 
Saying Hello to Bug Bounty
Saying Hello to Bug BountySaying Hello to Bug Bounty
Saying Hello to Bug Bounty
 
Event-sourced architectures with Akka
Event-sourced architectures with AkkaEvent-sourced architectures with Akka
Event-sourced architectures with Akka
 
Visitor Pattern
Visitor PatternVisitor Pattern
Visitor Pattern
 
OWASP Mobile Top 10 Deep-Dive
OWASP Mobile Top 10 Deep-DiveOWASP Mobile Top 10 Deep-Dive
OWASP Mobile Top 10 Deep-Dive
 
Transactions and Concurrency Control Patterns
Transactions and Concurrency Control PatternsTransactions and Concurrency Control Patterns
Transactions and Concurrency Control Patterns
 
Proxy Pattern
Proxy PatternProxy Pattern
Proxy Pattern
 
Proxy pattern
Proxy patternProxy pattern
Proxy pattern
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Security Vulnerabilities
Security VulnerabilitiesSecurity Vulnerabilities
Security Vulnerabilities
 
Hexagonal architecture
Hexagonal architectureHexagonal architecture
Hexagonal architecture
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring Boot
 
Java ee 8 + security overview
Java ee 8 + security overviewJava ee 8 + security overview
Java ee 8 + security overview
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring Cloud
 
Memcache basics on google app engine
Memcache basics on google app engineMemcache basics on google app engine
Memcache basics on google app engine
 
Brownfield Domain Driven Design
Brownfield Domain Driven DesignBrownfield Domain Driven Design
Brownfield Domain Driven Design
 
The Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudThe Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring Cloud
 
Integration testing for microservices with Spring Boot
Integration testing for microservices with Spring BootIntegration testing for microservices with Spring Boot
Integration testing for microservices with Spring Boot
 
Microservices architecture overview v2
Microservices architecture overview v2Microservices architecture overview v2
Microservices architecture overview v2
 
Singleton design pattern
Singleton design patternSingleton design pattern
Singleton design pattern
 

Similar to Spring One 2 GX 2014 - CACHING WITH SPRING: ADVANCED TOPICS AND BEST PRACTICES

Share point 2013 distributed cache
Share point 2013 distributed cacheShare point 2013 distributed cache
Share point 2013 distributed cacheMichael Nokhamzon
 
Web20expo Scalable Web Arch
Web20expo Scalable Web ArchWeb20expo Scalable Web Arch
Web20expo Scalable Web Archguest18a0f1
 
Web20expo Scalable Web Arch
Web20expo Scalable Web ArchWeb20expo Scalable Web Arch
Web20expo Scalable Web Arch
mclee
 
Web20expo Scalable Web Arch
Web20expo Scalable Web ArchWeb20expo Scalable Web Arch
Web20expo Scalable Web Arch
royans
 
IMC Summit 2016 Breakout - Per Minoborg - Work with Multiple Hot Terabytes in...
IMC Summit 2016 Breakout - Per Minoborg - Work with Multiple Hot Terabytes in...IMC Summit 2016 Breakout - Per Minoborg - Work with Multiple Hot Terabytes in...
IMC Summit 2016 Breakout - Per Minoborg - Work with Multiple Hot Terabytes in...
In-Memory Computing Summit
 
Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011
Wim Godden
 
Jug Lugano - Scale over the limits
Jug Lugano - Scale over the limitsJug Lugano - Scale over the limits
Jug Lugano - Scale over the limitsDavide Carnevali
 
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYCScalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYCCal Henderson
 
Web Speed And Scalability
Web Speed And ScalabilityWeb Speed And Scalability
Web Speed And Scalability
Jason Ragsdale
 
Caching principles-solutions
Caching principles-solutionsCaching principles-solutions
Caching principles-solutionspmanvi
 
MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011
Mike Willbanks
 
Four Ways to Improve ASP .NET Performance and Scalability
 Four Ways to Improve ASP .NET Performance and Scalability Four Ways to Improve ASP .NET Performance and Scalability
Four Ways to Improve ASP .NET Performance and Scalability
Alachisoft
 
Application Scalability in Server Farms - NCache
Application Scalability in Server Farms - NCacheApplication Scalability in Server Farms - NCache
Application Scalability in Server Farms - NCache
Alachisoft
 
Scalable Web Arch
Scalable Web ArchScalable Web Arch
Scalable Web Arch
royans
 
Scalable Web Architectures - Common Patterns & Approaches
Scalable Web Architectures - Common Patterns & ApproachesScalable Web Architectures - Common Patterns & Approaches
Scalable Web Architectures - Common Patterns & ApproachesCal Henderson
 
Presto at Tivo, Boston Hadoop Meetup
Presto at Tivo, Boston Hadoop MeetupPresto at Tivo, Boston Hadoop Meetup
Presto at Tivo, Boston Hadoop Meetup
Justin Borgman
 
Mini-Training: To cache or not to cache
Mini-Training: To cache or not to cacheMini-Training: To cache or not to cache
Mini-Training: To cache or not to cache
Betclic Everest Group Tech Team
 
Caching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTourCaching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTour
Wim Godden
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011
Wim Godden
 
phptek13 - Caching and tuning fun tutorial
phptek13 - Caching and tuning fun tutorialphptek13 - Caching and tuning fun tutorial
phptek13 - Caching and tuning fun tutorial
Wim Godden
 

Similar to Spring One 2 GX 2014 - CACHING WITH SPRING: ADVANCED TOPICS AND BEST PRACTICES (20)

Share point 2013 distributed cache
Share point 2013 distributed cacheShare point 2013 distributed cache
Share point 2013 distributed cache
 
Web20expo Scalable Web Arch
Web20expo Scalable Web ArchWeb20expo Scalable Web Arch
Web20expo Scalable Web Arch
 
Web20expo Scalable Web Arch
Web20expo Scalable Web ArchWeb20expo Scalable Web Arch
Web20expo Scalable Web Arch
 
Web20expo Scalable Web Arch
Web20expo Scalable Web ArchWeb20expo Scalable Web Arch
Web20expo Scalable Web Arch
 
IMC Summit 2016 Breakout - Per Minoborg - Work with Multiple Hot Terabytes in...
IMC Summit 2016 Breakout - Per Minoborg - Work with Multiple Hot Terabytes in...IMC Summit 2016 Breakout - Per Minoborg - Work with Multiple Hot Terabytes in...
IMC Summit 2016 Breakout - Per Minoborg - Work with Multiple Hot Terabytes in...
 
Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011
 
Jug Lugano - Scale over the limits
Jug Lugano - Scale over the limitsJug Lugano - Scale over the limits
Jug Lugano - Scale over the limits
 
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYCScalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
 
Web Speed And Scalability
Web Speed And ScalabilityWeb Speed And Scalability
Web Speed And Scalability
 
Caching principles-solutions
Caching principles-solutionsCaching principles-solutions
Caching principles-solutions
 
MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011
 
Four Ways to Improve ASP .NET Performance and Scalability
 Four Ways to Improve ASP .NET Performance and Scalability Four Ways to Improve ASP .NET Performance and Scalability
Four Ways to Improve ASP .NET Performance and Scalability
 
Application Scalability in Server Farms - NCache
Application Scalability in Server Farms - NCacheApplication Scalability in Server Farms - NCache
Application Scalability in Server Farms - NCache
 
Scalable Web Arch
Scalable Web ArchScalable Web Arch
Scalable Web Arch
 
Scalable Web Architectures - Common Patterns & Approaches
Scalable Web Architectures - Common Patterns & ApproachesScalable Web Architectures - Common Patterns & Approaches
Scalable Web Architectures - Common Patterns & Approaches
 
Presto at Tivo, Boston Hadoop Meetup
Presto at Tivo, Boston Hadoop MeetupPresto at Tivo, Boston Hadoop Meetup
Presto at Tivo, Boston Hadoop Meetup
 
Mini-Training: To cache or not to cache
Mini-Training: To cache or not to cacheMini-Training: To cache or not to cache
Mini-Training: To cache or not to cache
 
Caching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTourCaching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTour
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011
 
phptek13 - Caching and tuning fun tutorial
phptek13 - Caching and tuning fun tutorialphptek13 - Caching and tuning fun tutorial
phptek13 - Caching and tuning fun tutorial
 

More from Michael Plöd

Event Sourcing: Einführung und Best Practices
Event Sourcing: Einführung und Best PracticesEvent Sourcing: Einführung und Best Practices
Event Sourcing: Einführung und Best Practices
Michael Plöd
 
Building Microservices with Event Sourcing and CQRS
Building Microservices with Event Sourcing and CQRSBuilding Microservices with Event Sourcing and CQRS
Building Microservices with Event Sourcing and CQRS
Michael Plöd
 
Migrating from Grails 2 to Grails 3
Migrating from Grails 2 to Grails 3Migrating from Grails 2 to Grails 3
Migrating from Grails 2 to Grails 3
Michael Plöd
 
Event Sourcing: Introduction & Challenges
Event Sourcing: Introduction & ChallengesEvent Sourcing: Introduction & Challenges
Event Sourcing: Introduction & Challenges
Michael Plöd
 
Caching in Hibernate
Caching in HibernateCaching in Hibernate
Caching in Hibernate
Michael Plöd
 
Anatomie von Microservice Landschaften
Anatomie von Microservice LandschaftenAnatomie von Microservice Landschaften
Anatomie von Microservice Landschaften
Michael Plöd
 
Event Sourcing für reaktive Anwendungen
Event Sourcing für reaktive AnwendungenEvent Sourcing für reaktive Anwendungen
Event Sourcing für reaktive Anwendungen
Michael Plöd
 
CQRS basierte Architekturen mit Microservices
CQRS basierte Architekturen mit MicroservicesCQRS basierte Architekturen mit Microservices
CQRS basierte Architekturen mit Microservices
Michael Plöd
 
Caching - Hintergründe, Patterns und Best Practices
Caching - Hintergründe, Patterns und Best PracticesCaching - Hintergründe, Patterns und Best Practices
Caching - Hintergründe, Patterns und Best Practices
Michael Plöd
 
Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework? Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework?
Michael Plöd
 
Bessere Präsentationen
Bessere PräsentationenBessere Präsentationen
Bessere Präsentationen
Michael Plöd
 
Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6
Michael Plöd
 

More from Michael Plöd (13)

Event Sourcing: Einführung und Best Practices
Event Sourcing: Einführung und Best PracticesEvent Sourcing: Einführung und Best Practices
Event Sourcing: Einführung und Best Practices
 
Building Microservices with Event Sourcing and CQRS
Building Microservices with Event Sourcing and CQRSBuilding Microservices with Event Sourcing and CQRS
Building Microservices with Event Sourcing and CQRS
 
Migrating from Grails 2 to Grails 3
Migrating from Grails 2 to Grails 3Migrating from Grails 2 to Grails 3
Migrating from Grails 2 to Grails 3
 
Event Sourcing: Introduction & Challenges
Event Sourcing: Introduction & ChallengesEvent Sourcing: Introduction & Challenges
Event Sourcing: Introduction & Challenges
 
Caching in Hibernate
Caching in HibernateCaching in Hibernate
Caching in Hibernate
 
Anatomie von Microservice Landschaften
Anatomie von Microservice LandschaftenAnatomie von Microservice Landschaften
Anatomie von Microservice Landschaften
 
Event Sourcing für reaktive Anwendungen
Event Sourcing für reaktive AnwendungenEvent Sourcing für reaktive Anwendungen
Event Sourcing für reaktive Anwendungen
 
CQRS basierte Architekturen mit Microservices
CQRS basierte Architekturen mit MicroservicesCQRS basierte Architekturen mit Microservices
CQRS basierte Architekturen mit Microservices
 
Caching - Hintergründe, Patterns und Best Practices
Caching - Hintergründe, Patterns und Best PracticesCaching - Hintergründe, Patterns und Best Practices
Caching - Hintergründe, Patterns und Best Practices
 
Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework? Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework?
 
Hibernate Tuning
Hibernate TuningHibernate Tuning
Hibernate Tuning
 
Bessere Präsentationen
Bessere PräsentationenBessere Präsentationen
Bessere Präsentationen
 
Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6
 

Recently uploaded

Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
Enterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptxEnterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptx
QuickwayInfoSystems3
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
abdulrafaychaudhry
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
abdulrafaychaudhry
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
vrstrong314
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 

Recently uploaded (20)

Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
Enterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptxEnterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptx
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 

Spring One 2 GX 2014 - CACHING WITH SPRING: ADVANCED TOPICS AND BEST PRACTICES

  • 1. Caching with Spring: Advanced Topics and Best Practices © 2014 SpringOne 2GX. All rights reserved. Do not distribute without permission. Michael Plöd @bitboss
  • 2. I will talk about Caching Types / Topologies Best Practices for Caching in Enterprise Applications Caching with Spring JCache and Spring I will NOT talk about Latency / Synchronization discussion What is the best caching product on the market HTTP / Database Caching Caching in JPA, Hibernate or other ORMs
  • 3. Cache! / kæʃ /! In computing, a cache is a component that transparently stores data so that future requests for that data can be served faster. The data that is stored within a cache might be values that have been computed earlier or duplicates of original values that are stored elsewhere. If requested data is contained in the cache (cache hit), this request can be served by simply reading the cache, which is comparatively faster. Otherwise (cache miss), the data has to be recomputed or fetched from its original storage location, which is comparatively slower. Hence, the greater the number of requests that can be served from the cache, the faster the overall system performance becomes. Source: http://en.wikipedia.org/wiki/Cache_(computing)
  • 4. That’s awesome. Let’s cache everything and everywhere and distribute it all in a Cluster in a transactional manner ohhh by the way: Twitter has been doing that for ages Are you crazy?
  • 6. Many enterprise grade projects are adapting caching too defensive or too offensive and are running into consistency or performance issues because of that
  • 7. But with a well adjusted caching strategy you will make your application more scalable, faster and cheaper to operate.
  • 8. Local Cache, Data Grid, Document Store, JPA First Level Cache, JPA Second Level Cache, Types of Places CACHES for Hybrid Cache Database, Heap, HTTP Proxy, Browser, Prozessor, Disk, Off Heap, Persistence- Framework, Application
  • 9. We will focus on local and distributed caching at the application level with the Spring Framework
  • 10. Which data shall I cache? Which cache shall I use? Where shall I cache? Which impact does it have on my infrastructure How about data-consistency How do I introduce caching? How about caching in Spring?
  • 11. Which data shall I cache? Which cache shall I use? Where shall I cache? Which impact does it have on my infrastructure How about data-consistency How do I introduce caching? How about caching in Spring?
  • 12. 1 Identify suitable layers for caching
  • 13. ComplaintManagementRestController ComplaintManagementBusinessService DataAggrgationManager Host! Commands SAP! Commands Spring Data Repository HTTP Caching Read Operations Read Operations Read Operations Read Operations Read and Write Operations Suitable Layers for Caching
  • 14. 2 Stay local as long as possible
  • 16. Clustered JVM Cache JVM Cache JVM Cache JVM Cache
  • 17. Which data shall I cache? Which cache shall I use? Where shall I cache? Which impact does it have on my infrastructure How about data-consistency How do I introduce caching? How about caching in Spring?
  • 18. Clustered - with sync JVM JVM JVM JVM Cache Cache Cache Cache
  • 19. Clustered - with sync JVM JVM JVM JVM Cache Cache Cache Cache Invalidation Replication
  • 20. 3 Avoid real replication where possible
  • 21. Invalidation - Option 1 Cache Cache Cache Cache
  • 22. Invalidation - Option 1 Cache Cache Cache #1 Cache PUT (Insert) PUT (Insert) #1 #1 PUT (Insert) PUT (Insert) #1
  • 23. Invalidation - Option 1 Cache #1 #1 Cache Cache Cache #1 #1
  • 24. Invalidation - Option 1 Cache #1 #1 Cache Cache Cache PUT (Update) #1 #1
  • 25. Invalidation - Option 1 Cache Cache Cache Cache PUT (Update) #1
  • 26. Invalidation - Option 2 Cache Cache Cache Cache
  • 27. Invalidation - Option 2 Cache Cache Cache Cache PUT (Insert) #1
  • 28. Replication Cache Cache Cache Cache
  • 29. Replication Cache Cache Cache #1 Cache #1 #1 #1 PUT (Insert)
  • 30. Replication Cache Cache Cache #1 Cache #1 #1 #1
  • 31. Replication Cache Cache Cache #1 Cache #1 #1 #1 PUT (Update)
  • 32. As of now every cache could potentially hold every data which consumes heap memory
  • 34. Which data shall I cache? Which cache shall I use? Where shall I cache? Which impact does it have on my infrastructure How about data-consistency How do I introduce caching? How about caching in Spring?
  • 35. 4 Avoid big heaps just for caching
  • 36. Big heap leads to long major GCs Cache Application Data 32 GB
  • 37. Long GCs can destabilize your cluster JVM Cache JVM Cache JVM Cache JVM Cache
  • 38. Small caches are a bad idea! " Many evictions, fewer hits, no „hot data“. This is especially critical for replicating caches.
  • 39. 5 Use a distributed cache for big amounts of data
  • 40. Distributed Caches JVM JVM JVM JVM Cache Node 1 Cache Node 2 Cache Node 3
  • 41. 1 Customer #23 Customer #30 Customer #27 Customer #32
  • 42. 1 2 Customer #23 Customer #30 Customer #27 Customer #32 BACKUP #27 BACKUP #32 BACKUP #23 BACKUP #30 Data is being distributed and backed up
  • 43. 1 2 3 Customer #23 Customer #30 Customer #27 Customer #32 BACKUP #27 BACKUP #32 BACKUP #23 BACKUP #30
  • 44. 1 2 Customer #23 3 4 Customer #30 Customer #27 Customer #32 BACKUP #27 BACKUP #32 BACKUP #23 BACKUP #30
  • 46. A distributed cache leads to smaller heaps, more capacity and is easy to scale Application Data Cache 2 - 4 GB … Cache
  • 47. 6 The operations specialist is your new best friend
  • 48. Clustered caches are complex. Please make sure that operations and networking are involved as early as possible.
  • 49. Which data shall I cache? Which cache shall I use? Where shall I cache? Which impact does it have on my infrastructure How about data-consistency How do I introduce caching? How about caching in Spring?
  • 50. 7 Make sure that only suitable data gets cached
  • 51. The best cache candidates are read-mostly data, which are expensive to obtain
  • 52. If you urgently must cache write-intensive data make sure to use a distributed cache and not a replicated or invalidating one
  • 53. Which data shall I cache? Which cache shall I use? Where shall I cache? Which impact does it have on my infrastructure How about data-consistency How do I introduce caching? How about caching in Spring?
  • 54. 8 Only use existing cache implementations
  • 55. NEVER write your own cache implementation EVER
  • 56. Infinispan, EHCache, Hazelcast, Couchbase, Memcache, OSCache, SwarmCache, Xtreme Cache, Apache DirectMemory CACHE Implementations Terracotta, Coherence, Gemfire, Cacheonix, WebSphere eXtreme Scale, Oracle 12c In Memory Database
  • 57. Which data shall I cache? Which cache shall I use? Where shall I cache? Which impact does it have on my infrastructure How about data-consistency How do I introduce caching? How about caching in Spring?
  • 58. 9 Introduce Caching in three steps
  • 59. Optimize your application Local Cache Distributed Cache Performance Boost Performance Loss
  • 61. Example: Hazelcast putting and getting 10.000 objects locally GET Time PUT Time Payload Size Serializable ? ? ? Data Serializable ? ? ? Identifier Data Serializable ? ? ?
  • 63. Example: Hazelcast putting and getting 10.000 objects locally GET Time PUT Time Payload Size Serializable 1287 ms 1220 ms 1164 byte Data Serializable 443 ms 408 ms 916 byte Identifier Data Serializable 264 ms 207 ms 882 byte
  • 64. JAVA SERIALIZATION SUCKS for Caching if alternatives are present
  • 65. 11 Use Off-Heap Storage for Cache instances with more than 4 GB Heap Size
  • 66. Off Heap 30 GB RAM No Garbage Collection JVM Cache Runtime Cache Data 2 GB HEAP Very short Garbage Collections
  • 67. 12 Mind the security gap
  • 68. Application Security Security Security „CRM“ „Host“ DB Cache CRM Data SAP Data DB Data ? Mind security when reading data from the cache
  • 69. I <3 Spring " Bot censored I’m at a Spring conference and this guy is 50 slides in and hasn’t yet mentioned Spring even if he advertised
  • 70. 13 Abstract your cache provider
  • 71. Tying your code to a cache provider is bad practice public Account retrieveAccount(String accountNumber) {! Cache cache = ehCacheMgr.getCache(„accounts“);! Account account = null;! Element element = cache.get(accountNumber);! if(element == null) {! //execute some business logic for retrieval! //account = result of logic above! cache.put(new Element(accountNumber, account));! } else {! account = (Account)element.getObjectValue();! }! return account;! }
  • 72. Try switching from EHCache to Hazelcast public Account retrieveAccount(String accountNumber) {! Cache cache = ehCacheMgr.getCache(„accounts“);! Account account = null;! Element element = cache.get(accountNumber);! if(element == null) {! //execute some business logic for retrieval! //account = result of logic above! cache.put(new Element(accountNumber, account));! } else {! account = (Account)element.getObjectValue();! }! return account;! } You will have to adjust these lines of code to the Hazelcast API
  • 73. You can’t switch cache providers between environments public Account retrieveAccount(String accountNumber) {! Cache cache = ehCacheMgr.getCache(„accounts“);! Account account = null;! Element element = cache.get(accountNumber);! if(element == null) {! //execute some business logic for retrieval! //account = result of logic above! cache.put(new Element(accountNumber, account));! } else {! account = (Account)element.getObjectValue();! }! return account;! } EHCache is tightly coupled to your code
  • 74. You mess up your business logic with infrastructure public Account retrieveAccount(String accountNumber) {! Cache cache = ehCacheMgr.getCache(„accounts“);! Account account = null;! Element element = cache.get(accountNumber);! if(element == null) {! //execute some business logic for retrieval! //account = result of logic above! cache.put(new Element(accountNumber, account));! } else {! account = (Account)element.getObjectValue();! }! return account;! } This is all caching related code without any business relevance
  • 75. Introducing Spring’s cache abstraction <cache:annotation-driven cache-manager="ehCacheManager"/>! " <!-- EH Cache local -->! <bean id="ehCacheManager" ! class="org.springframework.cache.ehcache.EhCacheCacheManager"! p:cacheManager-ref="ehcache"/>! ! ! <bean id="ehcache" ! class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"! ! p:configLocation="/ehcache.xml"/> @Cacheable("Customers")! public Customer getCustomer(String customerNumber) {! ! …! }
  • 76. Spring’s Caching Annotations Annotation Description @Cacheable Demarcates cachable methods, can read and write to the cache(s) @CacheEvict Demarcates methods that perform cache eviction, that is methods that act as triggers for removing data from the cache. @CachePut Updates the cache with the annotated method’s return value. Will always execute the method. @Caching Allows multiple nested @Cacheable, @CacheEvict and @CachePut annotations to be used on the same method @CacheConfig Class-level annotation that allows to share the cache names, the custom KeyGenerator, the custom CacheManager and finally the custom CacheResolver. Does not enable caching.
  • 77. Default Key Generation Strategy Annotation Key @Cacheable("Customers")! public Customer getCustomer(String customerNumber) {! ! …! } @Cacheable("CustomerList")! public List<Customer> listCustomers(int start, int count) {! ! …! } @Cacheable("MonthlyReport")! public Report getMonthlyReport() {! ! …! } customerNumber SimpleKey containing start and count SimpleKey.EMPTY
  • 78. public class MyOwnKeyGenerator implements KeyGenerator {! @Override! public Object generate(Object target, Method method, Object... params) {! if (params.length == 0) {! return new SimpleKey("EMPTY");! }! if (params.length == 1) {! Object param = params[0];! if (param != null && !param.getClass().isArray()) {! return param;! }! }! return new SimpleKey(params);! }! } You need a custom default KeyGenerator? <cache:annotation-driven cache-manager="hazelcastCacheManager" keyGenerator="myOwnKeyGenerator" />
  • 79. SpEL in Caching Annotations Annotation Effect @Cacheable("concerts", key="#location.id")! public List<Concert> findConcerts(Location location) @Cacheable("concerts", key="T(someType).hash(#location)")! public List<Concert> findConcerts(Location location) @Cacheable("concerts", condition="#location.city == 'Dallas')", unless="#location.outOfBusiness")! public List<Concert> findConcerts(Location location) Key: id of location @CachePut("locations", key="#result.id")! public Location saveLocation(Location location) Key: hashCode of location Conditional Caching if Location is in Dallas in operating Key: generated id of result
  • 80. I have multiple Caches and Cache Managers! @Cacheable("concerts", cacheManager="hazelCastCacheManager")! public List<Concert> findConcerts(Location location) @Cacheable("bands", cacheManager="gemfireCacheManager"))! public List<Band> listBand(int start, int count) @Cacheable("bands", cacheResolver="myOwnCacheResolver"))! public List<Band> listBand(int start, int count) Programmatic resolution through an implementation of the CacheResolver Interface Manual Assignment Manual Assignment
  • 81. public class MyOwnCacheResolver extends AbstractCacheResolver {! @Autowired public MyOwnCacheResolver(CacheManager cacheManager) { super(cacheManager); } protected Collection<String> getCacheNames(CacheOperationInvocationContext<?> context) {! return getCacheNames(context.getTarget().getClass());! }! " private getCacheNames(Class<?> businessServiceClass) { ... }! } Working with CacheResolvers @Cacheable("bands", cacheResolver="myOwnCacheResolver"))! public List<Band> listBand(int start, int count)
  • 82. You can use your own custom Annotations @Retention(RetentionPolicy.RUNTIME)! @Target({ElementType.METHOD})! @Cacheable("concerts", key="id")! public @interface DefaultConcertCacheable {! } @DefaultConcertCacheable! public Concert getConcert(Long id)
  • 83. Spring 4.x is the first commerically supported container with JCache (JSR-107) Support! That’s years ahead of any JEE Server
  • 84. Spring vs JCache Annotations Spring JCache Description @Cacheable @CacheResult Similar, but @CacheResult can cache Exceptions and force method execution @CacheEvict @CacheRemove Similar, but @CacheRemove supports eviction in the case of Exceptions @CacheEvict (removeAll=true) @CacheRemoveAll Same rules as for @CacheEvict vs @CacheRemove @CachePut @CachePut Different semantic: cache content must be annotated with @CacheValue. JCache brings Exception caching and caching before or after method execution @CacheConfig @CachePut Identical
  • 85. Except for the dependencies JCache API and spring-context-support no further steps need to be taken to enable JCache Annotations in Spring Applications
  • 86. ? Your Cache Provider has no integration for Spring or JCache
  • 88. How do I disable caching for Unit Tests? <bean id="cacheManager" class="org.springframework.cache.support.CompositeCacheManager">! <property name="cacheManagers">! <list>! <ref bean="guavaCache"/>! <ref bean="ehCache"/>! </list>! </property>! <property name="fallbackToNoOpCache" value="true"/>! </bean>
  • 89. Thank you! 82 Michael Plöd - Freelance Consultant https://github.com/mploed @bitboss http://slideshare.net/mploed