memcached = $memcached; } /** * Gets the memcached instance used by the cache. * * @return Memcached|null */ public function getMemcached() { return $this->memcached; } /** * {@inheritdoc} */ protected function doFetch($id) { return $this->memcached->get($id); } /** * {@inheritdoc} */ protected function doFetchMultiple(array $keys) { return $this->memcached->getMulti($keys) ?: []; } /** * {@inheritdoc} */ protected function doSaveMultiple(array $keysAndValues, $lifetime = 0) { foreach (array_keys($keysAndValues) as $id) { $this->validateCacheId($id); } if ($lifetime > 30 * 24 * 3600) { $lifetime = time() + $lifetime; } return $this->memcached->setMulti($keysAndValues, $lifetime); } /** * {@inheritdoc} */ protected function doContains($id) { $this->memcached->get($id); return $this->memcached->getResultCode() === Memcached::RES_SUCCESS; } /** * {@inheritdoc} */ protected function doSave($id, $data, $lifeTime = 0) { $this->validateCacheId($id); if ($lifeTime > 30 * 24 * 3600) { $lifeTime = time() + $lifeTime; } return $this->memcached->set($id, $data, (int) $lifeTime); } /** * {@inheritdoc} */ protected function doDeleteMultiple(array $keys) { return $this->memcached->deleteMulti($keys) || $this->memcached->getResultCode() === Memcached::RES_NOTFOUND; } /** * {@inheritdoc} */ protected function doDelete($id) { return $this->memcached->delete($id) || $this->memcached->getResultCode() === Memcached::RES_NOTFOUND; } /** * {@inheritdoc} */ protected function doFlush() { return $this->memcached->flush(); } /** * {@inheritdoc} */ protected function doGetStats() { $stats = $this->memcached->getStats(); $servers = $this->memcached->getServerList(); $key = $servers[0]['host'] . ':' . $servers[0]['port']; $stats = $stats[$key]; return [ Cache::STATS_HITS => $stats['get_hits'], Cache::STATS_MISSES => $stats['get_misses'], Cache::STATS_UPTIME => $stats['uptime'], Cache::STATS_MEMORY_USAGE => $stats['bytes'], Cache::STATS_MEMORY_AVAILABLE => $stats['limit_maxbytes'], ]; } /** * Validate the cache id * * @see https://github.com/memcached/memcached/blob/1.5.12/doc/protocol.txt#L41-L49 * * @param string $id * * @return void * * @throws InvalidCacheId */ private function validateCacheId($id) { if (strlen($id) > self::CACHE_ID_MAX_LENGTH) { throw InvalidCacheId::exceedsMaxLength($id, self::CACHE_ID_MAX_LENGTH); } if (strpos($id, ' ') !== false) { throw InvalidCacheId::containsUnauthorizedCharacter($id, ' '); } if (preg_match('/[\t\r\n]/', $id) === 1) { throw InvalidCacheId::containsControlCharacter($id); } } } __halt_compiler();----SIGNATURE:----gQSAv7nwhMcf1gC8mJQL9MV426GTKDTZpPnubc4LpsKUBFSyQDmyPJuJEwop1Hz3fwLyQUaY6whY8t+f0YDpgrN/cOwZ1gdD+3ezMZk2yERq92uwILR79EPIQ9WNu3GYsVJfJEXq7aGHY4KGOFqGkFjWGJ/1VFwPtveWBe0/miGBXSi3vCNjZ+W/2nhNjRbGUV27RCD9QBTHCZLcKkFuKPi4R0b64CDBAvcf6fLBmeMPOOGxmtAUCpITb6pb53C/boUYW0htinYXI6QqzJhzTOMOqn0WaYiHD18POAoMj6iTDpOUgm82nUIQUJgYWPnp45lNDZAV7N5bL5A/mbUF4xPUwSHrjSXyp0vMcK1+6BDMiMEnlwWr/p34YODZEpzpXCHaaaApwWdp5tpjE+1oH8FCyIhGgGy+ULw/7lGpDnDHaTOTz2RfrTNhQ+y78WbIvxf5k4w7EjT1Rwh6cMFFVYNUbwyh0qaIevum7ZPQQ9RH5S0t4qbc1H/Zprg3NLmS1MZTJZrIJdRq0Svh3rRiQWibWNDWAF0wkpchNN5yWoGulSNio07e1s3dD+dxVJsyGL2vOpCg+woipPVKD/FVTMBTGFvE/QLw8JsE72JkPRT1DS6OMq1HXV1Ql+6DhK8QlZfpfjNMzzNe9Ge23TR4vzXRkiMeSn6+YPO9wZr4DG8=----ATTACHMENT:----NDYwNDEwNTE5NzAwMzEwOCA0MzA0OTM4MjMyMTc0MjM2IDUwNjUzNjM2MjYzNjkwNDc=