Page Cache(I)ehcache

Page Cache(I)ehcache

1. Theory
user -----> page -----> filter ----> action ----> service ----> dao -------> database

2. Configuration changes
timeToIdleSeconds       no requests for a time, ehcache will delete the cache data.
timeToLiveSeconds      cache live time from the creatation time

<cache name="SimplePageCachingFilter"
                maxElementsInMemory="10"
                maxElementsOnDisk="10"
                eternal="false"
                overflowToDisk="true"
                diskSpoolBufferSizeMB="20"
                timeToIdleSeconds="900"
                timeToLiveSeconds="900"
                memoryStoreEvictionPolicy="LFU"
              />
LFU will erase the data by the hits of the requests.

<filter>
<filter-name>IndexCacheFilter</filter-name>
<filter-class>
net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter
</filter-class>
<init-param>
      <param-name>cacheName</param-name>
      <param-value>SimplePageCachingFilter</param-value>
    </init-param>
</filter>
<filter-mapping>
<filter-name>IndexCacheFilter</filter-name>
<url-pattern>/index.do</url-pattern>
</filter-mapping>

cache policy
FIFO   first in first out
LFU     less frequently used
LRU    least recently used

3. Problems and Solutions
But get error messages:
2011-07-07 22:44:04,716 ERROR [net.xxxx.app.utils.Utility] (Timer-2) Exception while evicting elements
java.lang.NullPointerException
at net.xxxx.app.utils.Utility.evictExpiredElements(Utility.java:2241)
at org.jboss.scheduler30ss.EhCacheEvictScheduler.perform(EhCacheEvictScheduler.java:37)
at org.jboss.varia.scheduler.Scheduler$Listener.handleNotification(Scheduler.java:1251)
at sun.reflect.GeneratedMethodAccessor207.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.jboss.mx.notification.NotificationListenerProxy.invoke(NotificationListenerProxy.java:153)
at $Proxy316.handleNotification(Unknown Source)
at javax.management.NotificationBroadcasterSupport.handleNotification(NotificationBroadcasterSupport.java:274)
at javax.management.NotificationBroadcasterSupport$SendNotifJob.run(NotificationBroadcasterSupport.java:339)
at javax.management.NotificationBroadcasterSupport$1.execute(NotificationBroadcasterSupport.java:324)
at javax.management.NotificationBroadcasterSupport.sendNotification(NotificationBroadcasterSupport.java:247)
at javax.management.timer.Timer.sendNotification(Timer.java:1247)
at javax.management.timer.Timer.notifyAlarmClock(Timer.java:1209)
at javax.management.timer.TimerAlarmClock.run(Timer.java:1298)
at java.util.TimerThread.mainLoop(Timer.java:534)
at java.util.TimerThread.run(Timer.java:484)

Caused by: net.sf.ehcache.CacheException: Error configuring from /home/luohua/tools/jboss/30ss/ehcache.xml.
Initial cause was Error configuring from input stream. Initial cause was null:509:
Element <cache> does not allow attribute "momoryStoreEvictionPolicy".

Solution:
This is my project problem. My project already use ehcache in the system.
It will create the CacheManager from a configuration file this way:
cm = CacheManager.create(configuration_file_directory + "/ehcache.xml");

That is the problem. So I will customized the filter class like this CustomerSimplePageCachingFilter.java:
package com.xxxxx.web.filter;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter;
import net.xxx.xxxx.utils.Utility;

public class CustomerSimplePageCachingFilter extends SimplePageCachingFilter {

protected CacheManager getCacheManager() {
return Utility.getCacheManager();
}
}

Performance Test
>ab -n 1000 -c 50 http://localhost:8080/project/index.do >> log1.txt
>ab -n 1000 -c 50 http://localhost:8080/project/index.do >> log2.txt

error message:
apr_poll: The timeout specified has expired (70007)

solution:
This a bug from ab maybe, I just change the -n to a small number.

The comparation of the test results log1.txt:
Concurrency Level:      50
Time taken for tests:   84.977 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      3444000 bytes
HTML transferred:       3055000 bytes
Requests per second:    11.77 [#/sec] (mean)
Time per request:       4248.845 [ms] (mean)
Time per request:       84.977 [ms] (mean, across all concurrent requests)
Transfer rate:          39.58 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.3      0       8
Processing:  2179 4201 704.5   4095    8009
Waiting:     2178 4201 704.5   4095    8009
Total:       2181 4201 704.5   4095    8009

Percentage of the requests served within a certain time (ms)
  50%   4095
  66%   4286
  75%   4425
  80%   4531
  90%   4960
  95%   5591
  98%   6454
  99%   6950
100%   8009 (longest request)

log2.txt:
Concurrency Level:      50
Time taken for tests:   0.709 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      3218000 bytes
HTML transferred:       2975000 bytes
Requests per second:    1410.30 [#/sec] (mean)
Time per request:       35.453 [ms] (mean)
Time per request:       0.709 [ms] (mean, across all concurrent requests)
Transfer rate:          4431.98 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.6      0       3
Processing:     1   34  22.3     30     181
Waiting:        1   34  22.2     30     165
Total:          2   34  22.7     30     184

Percentage of the requests served within a certain time (ms)
  50%     30
  66%     37
  75%     41
  80%     43
  90%     56
  95%     75
  98%     87
  99%    159
100%    184 (longest request)

references:
http://ahuaxuan.iteye.com/blog/128458
http://wiki.springside.org.cn/display/calvin/Ehcache
http://hi.baidu.com/luohuazju/blog/item/b9ac3e51803fe7858d543026.html
http://ehcache.org/documentation/samples.html#Cache_Server_Examples

你可能感兴趣的:(java,cache)