Advanced Cache Policies module
Operations Bundled: DX Core
Edition | DX Core |
---|---|
License |
|
Issues |
|
Maven site |
|
Latest |
2.3.4 |
The Advanced Cache module is collection of advanced cache strategies to help minimize load on the server while ensuring fresh content is served to the users.
Installing with Maven
Bundled modules are automatically installed for you.
If the module is unbundled, add the following to your bundle including your project’s <dependencyManagement>
section and your webapp’s <dependencies>
section.
If the module is unbundled but the version is managed by the parent POM, add the following to your webapp’s <dependencies>
section.
<dependency>
<groupId>info.magnolia.advancedcache</groupId>
<artifactId>magnolia-advanced-cache</artifactId>
<version>2.3.4</version> (1)
</dependency>
1 | Should you need to specify the module version, do it using <version> . |
Uninstalling
-
Set the cache policy in
/modules/cache/config/contentCaching/defaultPageCache/cachePolicy@class
back to the default valueinfo.magnolia.module.cache.cachepolicy.Default
. -
Remove the
/modules/advanced-cache
node and its subnodes. -
Shut down Magnolia, remove the Advanced Cache module JAR (
magnolia-advanced-cache.jar
) fromWEB-INF/lib
and start up Magnolia again.
Caching strategies
Serving old content while re-caching
Using this strategy, cache is not completely cleaned on content update and entries are retained. After update, when the first request comes in, fresh cache entry generation is triggered and all further requests for the same entry are served from old cache content until the new entry is ready.
-
Set
/modules/cache/config/contentCaching/defaultPageCache/cachePolicy@class
toinfo.magnolia.module.advancedcache.ServeUntilRecachedCachePolicy
. -
Set
/modules/cache/config/contentCaching/defaultPageCache/flushPolicy/policies/flushAll@class
toinfo.magnolia.module.advancedcache.NotifyFlushListeningPolicy
.
See also Timestamp for last flushing.
Eager re-caching
Using this strategy, cache keeps a list of the most frequently served entries. The system attempts to refresh these entries as soon as it detects a content update. All other entries are re-cached on request. It is possible to configure the number of entries to re-cache immediately and to set the lifetime of the most served content.
To enable eager re-caching:
-
Set
/modules/cache/config/contentCaching/defaultPageCache/cachePolicy@class
toinfo.magnolia.module.advancedcache.EagerRecacheCachePolicy
. -
Set
/modules/cache/config/contentCaching/defaultPageCache/flushPolicy/flushAll@class
toinfo.magnolia.module.advancedcache.EagerRecacheFlushPolicy
. -
Set
/modules/cache/config/contentCaching/defaultPageCache/executors/store/cacheContent@class
toinfo.magnolia.module.cache.executor.Store
.
Changing default flush policy
By default, statistics about served pages are retained indefinitely. If you want to force the system to flush the cache after each content update:
-
Create a
resetAfterUpdate
property node underflushPolicy
. -
Set the value to
true
.
By default, the top 100 entries are eagerly re-cached on every update. To change that number:
-
Create an
eagerRecache
property node underflushPolicy
. -
Set the value to the number of top entries in the list you wish to have eagerly re-cached.
See also Timestamp for last flushing.
Changing default waiting time
By default, Magnolia waits for 10 seconds before attempting to re-cache content.
This timeout is controlled by the blockingTimeout
property configured in the
Ehcache 3 back-end.
The blockingTimeout
property applies to the whole cache factory.
If you want to change the waiting time for a particular cache policy, add a timeout
property with the number of milliseconds to wait (the default value is 10000
).
Changes to cache policies and executors are applied immediately. Setting incorrect values can render the Magnolia instance inaccessible. If this happens, try the Groovy Rescue App:
|
See also Cache core module.
Timestamp for last flushing
The advanced flush policies update a lastUpdateTimestamp
property to
record the last flushing event. The timestamp allows the corresponding
cache policy to identify which cache entries need to be regenerated.
When you delegate cache to an advanced cache policy, create a property
at a path that includes the name of your custom policy.
Example 1: Serving old content while re-caching
-
/modules/advanced-cache/config/notifyFlushListeningPolicy@lastUpdateTimeStamp
(default) -
/modules/advanced-cache/config/notifyFlushListeningPolicy/
<custom_cache_name>
@lastUpdateTimeStamp
(custom)
Example 2: Eager re-caching
-
/modules/advanced-cache/config/eagerRecacheFlushPolicy@lastUpdateTimeStamp
(default) -
/modules/advanced-cache/config/eagerRecacheFlushPolicy/
<custom_cache_name>
@lastUpdateTimeStamp
(custom)
where <custom_cache_name>
is the name of your custom policy.
Headless personalization and caching
For headless personalization to work correctly with content caching in Magnolia, you have to set /modules/cache/config/contentCaching/<your-configuration>/cachePolicy@includePersonalizedDescendants
to true
.
By configuring this property, the dynamic page-caching function is disabled.
Magnolia does not currently support caching for different headers or cookies. Therefore, it is impossible to specify for which headers or cookies a response should be cached. See MGNLCACHE-245 for the upcoming improvement. |
Multisite cache configuration
When content is published, the cache on the public instance is flushed to show the new content. This increases the load on the server and affects all sites in a multisite environment. You can configure multiple cache configurations to ensure that only cache entries that belong to the same subree (site) as the published content are flushed. Use Advanced Cache app module for easy configuration or just do it manually:
-
Set
/modules/advanced-cache/config@createSeparateCachesForEachSite=true.
This creates caches for each site defined. It uses thedefaultPageCache
configuration for each site if/modules/cache/config/contentCaching/SITE-NAME
doesn’t exist. -
Set `/server/filters/cache@class=info.magnolia.module.advancedcache.filter.SiteAwareCacheFilter.`This filter chooses the right site-specific cache to use so you don’t need to have separate cache filters per cache.
-
Create
/modules/cache/config/contentCaching/defaultPageCache/flushPolicy/policies/flushSiteAware@class=info.magnolia.module.advancedcache.SiteAwareFlushAllListeningPolicy
. -
For all site-aware workspaces (those which have separate subtrees for each site):
-
Exclude the workspace from the default flush policy:
/modules/cache/config/contentCaching/defaultPageCache/flushPolicy/policies/flushAll/excludedWorkspaces@WORKSPACE_NAME=WORKSPACE_NAME
. -
Register this workspace to site aware flush policy:
/modules/cache/config/contentCaching/defaultPageCache/flushPolicy/policies/flushSiteAware/workspaces@WORKSPACE_NAME=WORKSPACE_NAME
.
-
-
Restart your instance.