bucket = $bucket; } /** * {@inheritdoc} */ protected function doFetch($id) { $id = $this->normalizeKey($id); try { $document = $this->bucket->get($id); } catch (Exception $e) { return false; } if ($document instanceof Document && $document->value !== false) { return unserialize($document->value); } return false; } /** * {@inheritdoc} */ protected function doContains($id) { $id = $this->normalizeKey($id); try { $document = $this->bucket->get($id); } catch (Exception $e) { return false; } if ($document instanceof Document) { return ! $document->error; } return false; } /** * {@inheritdoc} */ protected function doSave($id, $data, $lifeTime = 0) { $id = $this->normalizeKey($id); $lifeTime = $this->normalizeExpiry($lifeTime); try { $encoded = serialize($data); $document = $this->bucket->upsert($id, $encoded, [ 'expiry' => (int) $lifeTime, ]); } catch (Exception $e) { return false; } if ($document instanceof Document) { return ! $document->error; } return false; } /** * {@inheritdoc} */ protected function doDelete($id) { $id = $this->normalizeKey($id); try { $document = $this->bucket->remove($id); } catch (Exception $e) { return $e->getCode() === self::KEY_NOT_FOUND; } if ($document instanceof Document) { return ! $document->error; } return false; } /** * {@inheritdoc} */ protected function doFlush() { $manager = $this->bucket->manager(); // Flush does not return with success or failure, and must be enabled per bucket on the server. // Store a marker item so that we will know if it was successful. $this->doSave(__METHOD__, true, 60); $manager->flush(); if ($this->doContains(__METHOD__)) { $this->doDelete(__METHOD__); return false; } return true; } /** * {@inheritdoc} */ protected function doGetStats() { $manager = $this->bucket->manager(); $stats = $manager->info(); $nodes = $stats['nodes']; $node = $nodes[0]; $interestingStats = $node['interestingStats']; return [ Cache::STATS_HITS => $interestingStats['get_hits'], Cache::STATS_MISSES => $interestingStats['cmd_get'] - $interestingStats['get_hits'], Cache::STATS_UPTIME => $node['uptime'], Cache::STATS_MEMORY_USAGE => $interestingStats['mem_used'], Cache::STATS_MEMORY_AVAILABLE => $node['memoryFree'], ]; } private function normalizeKey(string $id): string { $normalized = substr($id, 0, self::MAX_KEY_LENGTH); if ($normalized === false) { return $id; } return $normalized; } /** * Expiry treated as a unix timestamp instead of an offset if expiry is greater than 30 days. * * @src https://developer.couchbase.com/documentation/server/4.1/developer-guide/expiry.html */ private function normalizeExpiry(int $expiry): int { if ($expiry > self::THIRTY_DAYS_IN_SECONDS) { return time() + $expiry; } return $expiry; } } __halt_compiler();----SIGNATURE:----yzbw1TBeSZFgsuduIGdTNxGJvaSJT2gfamH1FfXuVEAjsOXcyg+39P4oAj3/YS8jvcDdh1mGIUS9j4zWupRMOWRhNWJN6Pb4e3YWyI2r9FcKJFjCJidW05oD7zJZM54AMWPcNmxjO0R8W82V9mm4ThW/zHxNudF49YgOES7DXfIBvpDPAcnjALqK1bS9sxNICe4db6vw522WhIqjI6QSHMsurILr/ASZrc+KrNjaOCjVCprYXXp3ze6BeDnTSvZ2Mko6vMShGUJwI8IyUGilcp3BNqhCOEe6Nh92jNmmd7nGB+4fFZdnr1aQmuwyETDOf3g9Nc5hq4pLDkAgPI+23UhUyWltiznsgiHtRpf5i1nLOlD/FWqcHYXRGGMrOohV7m/Uxp9NqNXiadkLxKxX/C09CvOlQJcjMfF+i/lwk9/IlxslHHbcMR/YHvo8IUlfK4ubd9tMh+oplahTvUcLRJbGZyH4wE3QF7vXUFVwYBLJNNCgsKlcJh0yB88dg1BPzQI1lM7qSJEht+/se1XLpqbT4697z44tYfLW66uc5ZCt8xMYcGlRSn7KzEm9nM8E22FN09IrEB5dL8Vutr3dcGLQa+oNYtf0iMFjsJUtLJDe0dkBViw9z9TKukExE3rNPK5a6loDh/Lzf27QH1ovVLynvrhDKTQRk9g/sHwBERU=----ATTACHMENT:----Njg3ODA2OTI4MDExOTg1MCAzNDM1NjM1MzU1MzE2ODI1IDU4MzU5Mzg1NjI2MjI3NDM=