Magnolia 5.4 reached end of life on November 15, 2018. This branch is no longer supported, see End-of-life policy.
Memcached is high-performance, distributed memory object caching system. Memcached implementation for Magnolia CMS brings you the advantages of a distributed cache:
If you extend your web app from a magnolia-empty-webapp or any other web app extended from it (such as magnolia-bundled-webapp) you also need to exclude the default ehcache implementation:
<dependency> <groupId>info.magnolia</groupId> <artifactId>magnolia-empty-webapp</artifactId> <type>pom</type> <exclusions> <exclusion> <groupId>info.magnolia.cache</groupId> <artifactId>magnolia-cache-ehcache</artifactId> </exclusion> </dependency>
If you've never used memcached, look at how to install memcached server. You need at least one memcache server per cache. That means you need for every cache configuration under /modules/cache/config/contentCaching
one entry under /modules/cache/config/cacheFactory/caches
. This is at least (by default) defaultPageCache and uuid-key-mapping
.
Magnolia Memcached implementation uses Spymemcached client which has its own configuration options that can be set in info.magnolia.cache.memcached.spy.MemcachedFactory info.magnolia.cache.memcached.spy.MemcachedConnectionFactoryBuilder 10000 true BINARY 998 -1 false -1 false 30 localhost:11211 ../defaultPageCache localhost:11212/modules/cache/config/cacheFactory/CACHE_NAME
.Node name Value
Parameter | Default value | Description / Available values |
---|---|---|
protocolN2B | BINARY | BINARY or TEXT protocol. |
readBufSizeN2B | 10000 | Size of the read buffer. |
shouldOptimizeN2B | false | There are several elements of the design that each allow high throughput. |
useNagleAlgorithmN2B | true | Improves the efficiency of TCP/IP networks by reducing the number of packets that need to be sent over the network. |
maxReconnectDelayN2B | 30 | Set the maximum reconnect delay. |
opQueueMaxBlockTimeN2B | 1000 | Set the maximum amount of time (in milliseconds) a client is willing to wait for space to become available in an output queue. |
timeoutExceptionThresholdN2B | 998 | Set the maximum timeout exception threshold. |
opTimeoutN2B | -1 | Set the default operation timeout in milliseconds. |
failureModeN2B | Redistribute
|
|
transcoderN2B | net.spy.memcached.transcoders.SerializingTranscoder | Needs to be set as content node with class property:
|
locatorN2B | ARRAY_MOD
|
|
servers | - | Memcache server/s to use for this cache in format <domain or ip>:<port number> |
One of the advantage of memcached implementation is sharing of cache entries between multiple instances of Magnolia. If the cache item is processed by one of the public instances, it's send to memcached server/s and others Magnolia instances don't need to render the content again but use the item cached in memcached servers.
We were requesting content from two magnolia instances at the same time for the tests and you can see the results on the first graph. As you can see the throughput is 2x bigger since the instances shares the cache items. This of course applies only for the first requests for a content but that's the time after flushing of cache when the load on the server is the biggest.
The second graph shows performance when the items are already precached. Memcached is a little slower than ehcache in this case.
Please note that the Spymemcached client uses it's own licence:
Spymemcached license
/**
* Copyright (C) 2006-2009 Dustin Sallings
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALING
* IN THE SOFTWARE.
*/