Introduction: Java Cache

From Resin 4.0 Wiki

(Difference between revisions)
Jump to: navigation, search
(Created page with "{{Caching}}")
 
Line 1: Line 1:
 
{{Caching}}
 
{{Caching}}
 +
 +
= Cache Performance Benefits =
 +
 +
Since reducing database load is a typical cache benefit, it's useful to create a micro-benchmark to see how a cache can help. This is just a simple
 +
test with mysql running on the same server and a trivial query. In other words, it's not trying to exaggerate the value of the cache, because almost any
 +
real cache use will have a longer "doLongCalculation" than this simple example, and therefore the cache will benefit even more.
 +
 +
The micro-benchmark has a simple jdbc query in the "doLongCalculation" method
 +
 +
"SELECT value FROM test WHERE id=?"
 +
 +
and then to get useful data, the call to "doStuff" is repeated 300k times and compared with the direct call to "doLongCalculation" 300k times.
 +
 +
<table border='1'>
 +
<tr>
 +
  <th>Type</th>
 +
  <th>Time</th>
 +
  <th>requests per millisecond</th>
 +
  <th>Mysql CPU</th>
 +
</tr>
 +
<tr>
 +
  <th>JDBC</th>
 +
  <td>30s</td>
 +
  <td>10.0 req/ms</td>
 +
  <td>35%</td>
 +
</tr>
 +
<tr>
 +
  <th>Cache</th>
 +
  <td>0.3s</td>
 +
  <td>1095 req/ms</td>
 +
  <td>0%</td>
 +
</tr>
 +
</table>
 +
 +
Even this simple test shows how caches can win. In this simple benchmark, the performance is significantly faster and saves the database load.
 +
 +
* 10x faster
 +
* Remove Mysql load
 +
 +
To get more realistic numbers, you'll need to benchmark the difference on a full application. Micro-benchmarks like this are useful to explain concepts,
 +
but real benchmarks require testing against your own application, in combination with profiling. For example, Resin's simple profiling capabilities
 +
in the /resin-admin or with the pdf-report can get you quick and simple data in your application performance.
 +
 +
= The Resin ClusterCache implementation =
 +
 +
Since Resin's ClusterCache is a persistent cache, the entries you save will be stored to disk and recovered. This means you can store lots of data in the cache without worrying about running out of memory. (LocalCache is also a persistent cache.) If the memory becomes full, Resin will use the cache entries that are on disk. For performance, commonly-used items will remain in memory.

Revision as of 00:00, 28 January 2012

Squirrel-48.png

Cache Performance Benefits

Since reducing database load is a typical cache benefit, it's useful to create a micro-benchmark to see how a cache can help. This is just a simple test with mysql running on the same server and a trivial query. In other words, it's not trying to exaggerate the value of the cache, because almost any real cache use will have a longer "doLongCalculation" than this simple example, and therefore the cache will benefit even more.

The micro-benchmark has a simple jdbc query in the "doLongCalculation" method

"SELECT value FROM test WHERE id=?"

and then to get useful data, the call to "doStuff" is repeated 300k times and compared with the direct call to "doLongCalculation" 300k times.

Type Time requests per millisecond Mysql CPU
JDBC 30s 10.0 req/ms 35%
Cache 0.3s 1095 req/ms 0%

Even this simple test shows how caches can win. In this simple benchmark, the performance is significantly faster and saves the database load.

  • 10x faster
  • Remove Mysql load

To get more realistic numbers, you'll need to benchmark the difference on a full application. Micro-benchmarks like this are useful to explain concepts, but real benchmarks require testing against your own application, in combination with profiling. For example, Resin's simple profiling capabilities in the /resin-admin or with the pdf-report can get you quick and simple data in your application performance.

The Resin ClusterCache implementation

Since Resin's ClusterCache is a persistent cache, the entries you save will be stored to disk and recovered. This means you can store lots of data in the cache without worrying about running out of memory. (LocalCache is also a persistent cache.) If the memory becomes full, Resin will use the cache entries that are on disk. For performance, commonly-used items will remain in memory.

Personal tools
TOOLBOX
LANGUAGES