memcache = new \Memcached(); $default_opts = array( \Memcached::OPT_COMPRESSION => FALSE, \Memcached::OPT_DISTRIBUTION => \Memcached::DISTRIBUTION_CONSISTENT, ); foreach ($default_opts as $key => $value) { $this->memcache->setOption($key, $value); } // See README.txt for setting custom Memcache options when using the // memcached PECL extension. foreach ($this->settings->get('options', []) as $key => $value) { $this->memcache->setOption($key, $value); } // SASL configuration to authenticate with Memcached. // Note: this only affects the Memcached PECL extension. if ($sasl_config = $this->settings->get('sasl', [])) { $this->memcache->setSaslAuthData($sasl_config['username'], $sasl_config['password']); } } /** * {@inheritdoc} */ public function addServer($server_path, $persistent = FALSE) { list($host, $port) = explode(':', $server_path); if ($host == 'unix') { // Memcached expects just the path to the socket without the protocol $host = substr($host, 7); // Port is always 0 for unix sockets. $port = 0; } return $this->memcache->addServer($host, $port, $persistent); } /** * {@inheritdoc} */ public function close() { $this->memcache->quit(); } /** * {@inheritdoc} */ public function set($key, $value, $exp = 0, $flag = FALSE) { $full_key = $this->key($key); return $this->memcache->set($full_key, $value, $exp); } /** * {@inheritdoc} */ public function getMulti(array $keys) { $full_keys = array(); foreach ($keys as $cid) { $full_key = $this->key($cid); $full_keys[$cid] = $full_key; } if (PHP_MAJOR_VERSION === 7) { $results = $this->memcache->getMulti($full_keys, \Memcached::GET_PRESERVE_ORDER); } else { $cas_tokens = NULL; $results = $this->memcache->getMulti($full_keys, $cas_tokens, \Memcached::GET_PRESERVE_ORDER); } // If $results is FALSE, convert it to an empty array. if (!$results) { $results = array(); } // Convert the full keys back to the cid. $cid_results = array(); $cid_lookup = array_flip($full_keys); foreach (array_filter($results) as $key => $value) { $cid_results[$cid_lookup[$key]] = $value; } return $cid_results; } }