The JDBC disk cache uses a relational database such as MySQL as a persistent store. It works with Oracle, MySQL and HSQL. The cache elements are serialized and written into a BLOB. Multiple regions can share a single table. You can define multiple, differently configured JDBC disk caches in one JCS instance. This allows you to use different tables for different cache regions.
If you want to use numerous JDBC disk cache instances that talk to the same database, you can configure them to share a connection pool. You might want to use several different tables to partition the data. Some operations, such as index building on a MyISAM storage engine take longer if there are more items in the table.
############################################################## ################## DEFAULT CACHE REGION ##################### # sets the default aux value for any non configured caches jcs.default=MYSQL,RCluster jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes jcs.default.cacheattributes.MaxObjects=5000 jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache jcs.default.cacheattributes.UseMemoryShrinker=true jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=7200 jcs.default.cacheattributes.ShrinkerIntervalSeconds=60 jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes jcs.default.elementattributes.IsEternal=false jcs.default.elementattributes.MaxLifeSeconds=14400 jcs.default.elementattributes.IdleTime=14400 jcs.default.elementattributes.IsSpool=true jcs.default.elementattributes.IsRemote=true jcs.default.elementattributes.IsLateral=true ############################################################## ################## CACHE REGIONS AVAILABLE ################### ############################################################## ################## AUXILIARY CACHES AVAILABLE ################ # MYSQL disk cache used for flight options jcs.auxiliary.MYSQL=org.apache.jcs.auxiliary.disk.jdbc.JDBCDiskCacheFactory jcs.auxiliary.MYSQL.attributes=org.apache.jcs.auxiliary.disk.jdbc.JDBCDiskCacheAttributes jcs.auxiliary.MYSQL.attributes.userName=myUsername jcs.auxiliary.MYSQL.attributes.password=myPassword jcs.auxiliary.MYSQL.attributes.url=${MYSQL} jcs.auxiliary.MYSQL.attributes.driverClassName=org.gjt.mm.mysql.Driver jcs.auxiliary.MYSQL.attributes.tableName=JCS_STORE jcs.auxiliary.MYSQL.attributes.testBeforeInsert=false jcs.auxiliary.MYSQL.attributes.maxActive=100 jcs.auxiliary.MYSQL.attributes.MaxPurgatorySize=10000000 jcs.auxiliary.MYSQL.attributes.UseDiskShrinker=true jcs.auxiliary.MYSQL.attributes.ShrinkerIntervalSeconds=1800 jcs.auxiliary.MYSQL.attributes.allowRemoveAll=false jcs.auxiliary.MYSQL.attributes.EventQueueType=POOLED jcs.auxiliary.MYSQL.attributes.EventQueuePoolName=disk_cache_event_queue ############################################################## ################## OPTIONAL THREAD POOL CONFIGURATION ######### # Disk Cache pool thread_pool.disk_cache_event_queue.useBoundary=true thread_pool.disk_cache_event_queue.boundarySize=1000 thread_pool.disk_cache_event_queue.maximumPoolSize=50 thread_pool.disk_cache_event_queue.minimumPoolSize=10 thread_pool.disk_cache_event_queue.keepAliveTime=3500 thread_pool.disk_cache_event_queue.whenBlockedPolicy=RUN thread_pool.disk_cache_event_queue.startUpSize=10
This example uses two JDBC Disck Cache instances and a shared connection pool.
jcs.default=JDBC_0 jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes jcs.default.cacheattributes.MaxObjects=100 jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache jcs.default.cacheattributes.UseMemoryShrinker=false jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600 jcs.default.cacheattributes.ShrinkerIntervalSeconds=60 jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes jcs.default.elementattributes.IsEternal=false jcs.default.elementattributes.MaxLifeSeconds=700 jcs.default.elementattributes.IdleTime=1800 jcs.default.elementattributes.IsSpool=true jcs.default.elementattributes.IsRemote=true jcs.default.elementattributes.IsLateral=true # ############################################################# # ################# CONFIGURED REGIONS ######################## jcs.region.testCache1=JDBC_1 jcs.region.testCache1.cacheattributes.MaxObjects=10000 # ############################################################# # ################# AUXILIARY CACHES AVAILABLE ################ # JDBC disk cache jcs.auxiliary.JDBC_0=org.apache.jcs.auxiliary.disk.jdbc.JDBCDiskCacheFactory jcs.auxiliary.JDBC_0.attributes=org.apache.jcs.auxiliary.disk.jdbc.JDBCDiskCacheAttributes jcs.auxiliary.JDBC_0.attributes.tableName=JCS_STORE_0 jcs.auxiliary.JDBC_0.attributes.testBeforeInsert=false jcs.auxiliary.JDBC_0.attributes.allowRemoveAll=true jcs.auxiliary.JDBC_0.attributes.MaxPurgatorySize=10000000 jcs.auxiliary.JDBC_0.attributes.connectionPoolName=MySharedPool jcs.auxiliary.JDBC_0.attributes.EventQueueType=POOLED jcs.auxiliary.JDBC_0.attributes.EventQueuePoolName=disk_cache_event_queue jcs.auxiliary.JDBC_1=org.apache.jcs.auxiliary.disk.jdbc.JDBCDiskCacheFactory jcs.auxiliary.JDBC_1.attributes=org.apache.jcs.auxiliary.disk.jdbc.JDBCDiskCacheAttributes jcs.auxiliary.JDBC_1.attributes.tableName=JCS_STORE_1 jcs.auxiliary.JDBC_1.attributes.testBeforeInsert=false jcs.auxiliary.JDBC_1.attributes.allowRemoveAll=true jcs.auxiliary.JDBC_1.attributes.MaxPurgatorySize=10000000 jcs.auxiliary.JDBC_1.attributes.connectionPoolName=MySharedPool jcs.auxiliary.JDBC_1.attributes.EventQueueType=POOLED jcs.auxiliary.JDBC_1.attributes.EventQueuePoolName=disk_cache_event_queue # ############################################################# # ######## OPTIONAL SHARED CONNECTION POOL CONFIGURATION ###### # My Shared Pool jcs.jdbcconnectionpool.MySharedPool.attributes.userName=sa jcs.jdbcconnectionpool.MySharedPool.attributes.password= jcs.jdbcconnectionpool.MySharedPool.attributes.url=jdbc:hsqldb:target/cache_hsql_db jcs.jdbcconnectionpool.MySharedPool.attributes.driverClassName=org.hsqldb.jdbcDriver jcs.jdbcconnectionpool.MySharedPool.attributes.maxActive=15 # ############################################################# # ################# OPTIONAL THREAD POOL CONFIGURATION ######### # Disk Cache pool thread_pool.disk_cache_event_queue.useBoundary=false thread_pool.disk_cache_event_queue.boundarySize=500 thread_pool.disk_cache_event_queue.maximumPoolSize=15 thread_pool.disk_cache_event_queue.minimumPoolSize=10 thread_pool.disk_cache_event_queue.keepAliveTime=3500 thread_pool.disk_cache_event_queue.whenBlockedPolicy=RUN thread_pool.disk_cache_event_queue.startUpSize=10
drop TABLE JCS_STORE; CREATE TABLE JCS_STORE ( CACHE_KEY VARCHAR(250) NOT NULL, REGION VARCHAR(250) NOT NULL, ELEMENT BLOB, CREATE_TIME DATETIME, CREATE_TIME_SECONDS BIGINT, MAX_LIFE_SECONDS BIGINT, SYSTEM_EXPIRE_TIME_SECONDS BIGINT, IS_ETERNAL CHAR(1), PRIMARY KEY (CACHE_KEY, REGION) ); alter table JCS_STORE MAX_ROWS = 10000000; alter table JCS_STORE AVG_ROW_LENGTH = 2100; create index JCS_STORE_DELETE_IDX on JCS_STORE (SYSTEM_EXPIRE_TIME_SECONDS,IS_ETERNAL,REGION);