decorated = $decorated; $this->cache = $cache instanceof MultiGetCache && $cache instanceof MultiPutCache ? $cache : new MultiAdapter($cache); $this->baseKey = $baseKey; } /** * @return int */ public function getLifeTime() { return $this->lifeTime; } /** * @param int $lifeTime */ public function setLifeTime($lifeTime) { $this->lifeTime = (int)$lifeTime; } /** * @param array $recordIds * @return \array[] */ public function findByRecordIds(array $recordIds) { $keys = $this->computeKeys($recordIds); $data = $this->cache->fetchMultiple($keys); if (count($data) === count($keys)) { return array_combine($recordIds, $data); } $data = $this->decorated->findByRecordIds($recordIds); $this->cache->saveMultiple(array_combine($keys, $data)); return $data; } /** * @param int $recordId * @return void */ public function invalidate($recordId) { $this->cache->delete($this->computeKey($recordId)); } /** * @param int[] $recordIds * @return string[] */ private function computeKeys(array $recordIds) { return array_map([$this, 'computeKey'], array_unique($recordIds)); } /** * @param int $recordId * @return string */ private function computeKey($recordId) { return sprintf('%scaption[%d]', $this->baseKey, $recordId); } }