PhpRedis.php in Redis 8
File
src/Cache/PhpRedis.php
View source
<?php
namespace Drupal\redis\Cache;
use Drupal\Component\Serialization\SerializationInterface;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Cache\CacheTagsChecksumInterface;
class PhpRedis extends CacheBase {
protected $client;
public function __construct($bin, \Redis $client, CacheTagsChecksumInterface $checksum_provider, SerializationInterface $serializer) {
parent::__construct($bin, $serializer);
$this->client = $client;
$this->checksumProvider = $checksum_provider;
}
public function getMultiple(&$cids, $allow_invalid = FALSE) {
if (empty($cids)) {
return [];
}
$return = [];
$keys = array_map([
$this,
'getKey',
], $cids);
if (count($keys) > 1) {
$pipe = $this->client
->multi();
foreach ($keys as $key) {
$pipe
->hgetall($key);
}
$result = $pipe
->exec();
}
else {
$result = [
$this->client
->hGetAll(reset($keys)),
];
}
foreach (array_values($cids) as $index => $key) {
if (isset($result[$index]) && is_array($result[$index])) {
$item = $this
->expandEntry($result[$index], $allow_invalid);
if ($item) {
$return[$item->cid] = $item;
}
}
}
$cids = array_diff($cids, array_keys($return));
return $return;
}
public function set($cid, $data, $expire = Cache::PERMANENT, array $tags = []) {
$ttl = $this
->getExpiration($expire);
$key = $this
->getKey($cid);
if ($ttl <= 0) {
$this
->delete($key);
}
$entry = $this
->createEntryHash($cid, $data, $expire, $tags);
$pipe = $this->client
->multi();
$pipe
->hMset($key, $entry);
$pipe
->expire($key, $ttl);
$pipe
->exec();
}
public function doDeleteMultiple(array $cids) {
$keys = array_map([
$this,
'getKey',
], $cids);
$this->client
->del($keys);
}
}