RedisTaggedCache.php
TLDR
The RedisTaggedCache
class in the Illuminate\Cache
namespace is a subclass of the TaggedCache
class. It provides methods for storing, retrieving, and manipulating cached items using Redis as the cache store.
Methods
add
Store an item in the cache if the key does not exist.
put
Store an item in the cache.
increment
Increment the value of an item in the cache.
decrement
Decrement the value of an item in the cache.
forever
Store an item in the cache indefinitely.
flush
Remove all items from the cache.
flushValues
Flush the individual cache entries for the tags.
flushStale
Remove all stale reference entries from the tag set.
<?php
namespace Illuminate\Cache;
class RedisTaggedCache extends TaggedCache
{
/**
* Store an item in the cache if the key does not exist.
*
* @param string $key
* @param mixed $value
* @param \DateTimeInterface|\DateInterval|int|null $ttl
* @return bool
*/
public function add($key, $value, $ttl = null)
{
$this->tags->addEntry(
$this->itemKey($key),
! is_null($ttl) ? $this->getSeconds($ttl) : 0
);
return parent::add($key, $value, $ttl);
}
/**
* Store an item in the cache.
*
* @param string $key
* @param mixed $value
* @param \DateTimeInterface|\DateInterval|int|null $ttl
* @return bool
*/
public function put($key, $value, $ttl = null)
{
if (is_null($ttl)) {
return $this->forever($key, $value);
}
$this->tags->addEntry(
$this->itemKey($key),
$this->getSeconds($ttl)
);
return parent::put($key, $value, $ttl);
}
/**
* Increment the value of an item in the cache.
*
* @param string $key
* @param mixed $value
* @return int|bool
*/
public function increment($key, $value = 1)
{
$this->tags->addEntry($this->itemKey($key), updateWhen: 'NX');
return parent::increment($key, $value);
}
/**
* Decrement the value of an item in the cache.
*
* @param string $key
* @param mixed $value
* @return int|bool
*/
public function decrement($key, $value = 1)
{
$this->tags->addEntry($this->itemKey($key), updateWhen: 'NX');
return parent::decrement($key, $value);
}
/**
* Store an item in the cache indefinitely.
*
* @param string $key
* @param mixed $value
* @return bool
*/
public function forever($key, $value)
{
$this->tags->addEntry($this->itemKey($key));
return parent::forever($key, $value);
}
/**
* Remove all items from the cache.
*
* @return bool
*/
public function flush()
{
$this->flushValues();
$this->tags->flush();
return true;
}
/**
* Flush the individual cache entries for the tags.
*
* @return void
*/
protected function flushValues()
{
$entries = $this->tags->entries()
->map(fn (string $key) => $this->store->getPrefix().$key)
->chunk(1000);
foreach ($entries as $cacheKeys) {
$this->store->connection()->del(...$cacheKeys);
}
}
/**
* Remove all stale reference entries from the tag set.
*
* @return bool
*/
public function flushStale()
{
$this->tags->flushStaleEntries();
return true;
}
}