CacheBox is the core framework you need to instantiate in order to work with caching in your application. You can instantiate it with a CacheBoxConfig
object that will hold all of your caching configurations. To configure the library you can either do it programmatically or via a struct/data DSL, the choice is yours. After the library is instantiated and configured you can ask from it a named cache provider, or interact with the caches. By default, CacheBox can be started with no configuration and it will configure itself with the default configuration that is shipped with CacheBox that can be found in the following location:
/cachebox/system/cache/config/DefaultConfiguration.cfc
The default configuration is the following:
function configure(){// The CacheBox configuration structure DSLcacheBox = {// LogBox Configuration filelogBoxConfig = "cachebox.system.cache.config.LogBox",​// Scope registration, automatically register the cachebox factory instance on any CF scope// By default it registers itself on application scopescopeRegistration = {enabled = true,scope = "application", // valid CF scopekey = "cacheBox"},​// The defaultCache has an implicit name of "default" which is a reserved cache name// It also has a default provider of cachebox which cannot be changed.// All timeouts are in minutes// Please note that each object store could have more configuration propertiesdefaultCache = {objectDefaultTimeout = 120,objectDefaultLastAccessTimeout = 30,useLastAccessTimeouts = true,reapFrequency = 2,freeMemoryPercentageThreshold = 0,evictionPolicy = "LRU",evictCount = 1,maxObjects = 300,// Our default store is the concurrent soft referenceobjectStore = "ConcurrentSoftReferenceStore",// This switches the internal provider from normal cacheBox to coldbox enabled cacheboxcoldboxEnabled = false},​// Register all the custom named caches you like herecaches = {},// Register all event listeners here, they are created in the specified orderlisteners = []};}
If you are using CacheBox within a ColdBox application you do not need to worry about creating or even configuring the framework, as ColdBox ships already with a default configuration for ColdBox applications. However, you also have full control of configuring CacheBox at your application level (Please see the ColdBox application configuration section). The default configuration for a ColdBox application can be found in the following location:
/coldbox/system/web/config/CacheBox.cfc
In summary, CacheBox has two modes of operation:
Standalone Framework
ColdBox Application
If you have downloaded CacheBox as a standalone framework, then please make sure you use the correct namespace path (cachebox.system
). Also, once you create CacheBox make sure that you persist it somewhere, either in Application scope or any other scope or a dependency injection context (WireBox). ColdBox application users already have an instance of CacheBox created for you in every application and it is stored in the main application controller and can be retrieved via the following function:
// Get a reference to CacheBoxcontroller.getCacheBox();​// Get a reference to the default cache providercontroller.getCache() or getCache()​// Get a reference to a named cache providercontroller.getCache("template") or getCache("template")
Info Note: Most of the examples shown in this documentation refer the default framework namespace of coldbox.system. However, if you are using CacheBox as a standalone framework, then the namespace to use is
cachebox.system
. Happy Coding!
Let's start with the simplest example of them all which is just creating CacheBox with the default configuration. The rest of the samples show different configuration options:
import cachebox.system.cache.*;​// create cacheboxcachebox = new CacheFactory();// get the default cachecache = cachebox.getDefaultCache();// set a value in cache, with 60 minute timeout and 20 minute idle timeout.cache.set("MyValue", {name="Luis Majano", awesome=true, cacheWeirdo=true}, 60,20);
Here are some more configuration samples:
// Create CacheBox with default configurationcacheBox = new cachebox.system.cache.CacheFactory( );​​// Create CacheBox instancecacheBox = new cachebox.system.cache.CacheFactory( config );​// Create the config object as a CacheBox DSL Simple CFCdataCFC = new MyCacheBoxConfig();config = new cachebox.system.cache.config.CacheBoxConfig( CFCConfig=dataCFC );// Create CacheBox instancecacheBox = new cachebox.system.cache.CacheFactory( config );​​// Create the config object as a CacheBox DSL Simple CFC path onlyconfig = new cachebox.system.cache.config.CacheBoxConfig( CFCConfigPath="MyCacheBoxConfig" );// Create CacheBox instancecacheBox = new cachebox.system.cache.CacheFactory( config );​// Create CacheBoxConfig, call configuration methods on it and then create the factoryconfig = new cachebox.system.cache.config.CacheBoxConfig();// Configure programmatically: You can chain methods, woot!config.scopeRegistration( true, "application" ).defaultCache( objectStore="DiskStore", maxObject=200 );// Create CacheBox instancecacheBox = new cachebox.system.cache.CacheFactory( config );