public function MemcacheBackend::getMultiple in Memcache API and Integration 8.2
Returns data from the persistent cache when given an array of cache IDs.
Parameters
array $cids: An array of cache IDs for the data to retrieve. This is passed by reference, and will have the IDs successfully returned from cache removed.
bool $allow_invalid: (optional) If TRUE, cache items may be returned even if they have expired or been invalidated. Such items may sometimes be preferred, if the alternative is recalculating the value stored in the cache, especially if another concurrent thread is already recalculating the same value. The "valid" property of the returned objects indicates whether the items are valid or not. Defaults to FALSE.
Return value
array An array of cache item objects indexed by cache ID.
Overrides CacheBackendInterface::getMultiple
See also
\Drupal\Core\Cache\CacheBackendInterface::get()
1 call to MemcacheBackend::getMultiple()
- MemcacheBackend::get in src/
MemcacheBackend.php - Returns data from the persistent cache.
File
- src/
MemcacheBackend.php, line 131
Class
- MemcacheBackend
- Defines a Memcache cache backend.
Namespace
Drupal\memcacheCode
public function getMultiple(&$cids, $allow_invalid = FALSE) {
$cache = $this->memcache
->getMulti($cids);
$fetched = [];
foreach ($cache as $result) {
if (!$this
->timeIsGreaterThanBinDeletionTime($result->created)) {
continue;
}
if ($this
->valid($result->cid, $result) || $allow_invalid) {
// If the item is multipart, rebuild the original cache data by fetching
// children and combining them back into a single item.
if ($result->data instanceof MultipartItem) {
$childCIDs = $result->data
->getCids();
$dataParts = $this->memcache
->getMulti($childCIDs);
if (count($dataParts) !== count($childCIDs)) {
// We're missing a chunk of the original entry. It is not valid.
continue;
}
$result->data = $this
->combineItems($dataParts);
}
// Add it to the fetched items to diff later.
$fetched[$result->cid] = $result;
}
}
// Remove items from the referenced $cids array that we are returning,
// per comment in Drupal\Core\Cache\CacheBackendInterface::getMultiple().
$cids = array_diff($cids, array_keys($fetched));
return $fetched;
}