allow configuration of memcached options (#23729)
* allow configuration of memcache options Use production values for memcached as explained in http://apprize.info/php/scaling/15.html The current implementiation uses ascii based serialization. This PR should reduce traffic to the memcached server. cc @MorrisJobke @FelixBoehm * add config sample * merge config options, throw hint on config error * fix typo * fix config sample
This commit is contained in:
parent
3333c4c0b9
commit
e03f9e8103
|
@ -922,6 +922,30 @@ $CONFIG = array(
|
|||
//array('other.host.local', 11211),
|
||||
),
|
||||
|
||||
/**
|
||||
* Connection options for memcached, see http://apprize.info/php/scaling/15.html
|
||||
*/
|
||||
'memcached_options' => array(
|
||||
// Set timeouts to 50ms
|
||||
\Memcached::OPT_CONNECT_TIMEOUT => 50,
|
||||
\Memcached::OPT_RETRY_TIMEOUT => 50,
|
||||
\Memcached::OPT_SEND_TIMEOUT => 50,
|
||||
\Memcached::OPT_RECV_TIMEOUT => 50,
|
||||
\Memcached::OPT_POLL_TIMEOUT => 50,
|
||||
|
||||
// Enable compression
|
||||
\Memcached::OPT_COMPRESSION => true,
|
||||
|
||||
// Turn on consistent hashing
|
||||
\Memcached::OPT_LIBKETAMA_COMPATIBLE => true,
|
||||
|
||||
// Enable Binary Protocol
|
||||
\Memcached::OPT_BINARY_PROTOCOL => true,
|
||||
|
||||
// Binary serializer vill be enabled if the igbinary PECL module is available
|
||||
//\Memcached::OPT_SERIALIZER => \Memcached::SERIALIZER_IGBINARY,
|
||||
),
|
||||
|
||||
|
||||
/**
|
||||
* Location of the cache folder, defaults to ``data/$user/cache`` where
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
namespace OC\Memcache;
|
||||
|
||||
use OC\HintException;
|
||||
use OCP\IMemcache;
|
||||
|
||||
class Memcached extends Cache implements IMemcache {
|
||||
|
@ -52,6 +53,35 @@ class Memcached extends Cache implements IMemcache {
|
|||
}
|
||||
}
|
||||
self::$cache->addServers($servers);
|
||||
|
||||
$defaultOptions = [
|
||||
\Memcached::OPT_CONNECT_TIMEOUT => 50,
|
||||
\Memcached::OPT_RETRY_TIMEOUT => 50,
|
||||
\Memcached::OPT_SEND_TIMEOUT => 50,
|
||||
\Memcached::OPT_RECV_TIMEOUT => 50,
|
||||
\Memcached::OPT_POLL_TIMEOUT => 50,
|
||||
|
||||
// Enable compression
|
||||
\Memcached::OPT_COMPRESSION => true,
|
||||
|
||||
// Turn on consistent hashing
|
||||
\Memcached::OPT_LIBKETAMA_COMPATIBLE => true,
|
||||
|
||||
// Enable Binary Protocol
|
||||
\Memcached::OPT_BINARY_PROTOCOL => true,
|
||||
];
|
||||
// by default enable igbinary serializer if available
|
||||
if (\Memcached::HAVE_IGBINARY) {
|
||||
$defaultOptions[\Memcached::OPT_SERIALIZER] =
|
||||
\Memcached::SERIALIZER_IGBINARY;
|
||||
}
|
||||
$options = \OC::$server->getConfig()->getSystemValue('memcached_options', []);
|
||||
if (is_array($options)) {
|
||||
$options = $options + $defaultOptions;
|
||||
self::$cache->setOptions($options);
|
||||
} else {
|
||||
throw new HintException("Expected 'memcached_options' config to be an array, got $options");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue