blob: dfbf8cd28510561fa99db8f01f1a29f35a69117f [file] [log] [blame]
<?php
namespace LdapRecord\Query;
use Closure;
use DateInterval;
use DateTimeInterface;
use Psr\SimpleCache\CacheInterface;
class Cache
{
use InteractsWithTime;
/**
* The cache driver.
*
* @var CacheInterface
*/
protected $store;
/**
* Constructor.
*
* @param CacheInterface $store
*/
public function __construct(CacheInterface $store)
{
$this->store = $store;
}
/**
* Get an item from the cache.
*
* @param string $key
*
* @return mixed
*/
public function get($key)
{
return $this->store->get($key);
}
/**
* 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)
{
$seconds = $this->secondsUntil($ttl);
if ($seconds <= 0) {
return $this->delete($key);
}
return $this->store->set($key, $value, $seconds);
}
/**
* Get an item from the cache, or execute the given Closure and store the result.
*
* @param string $key
* @param DateTimeInterface|DateInterval|int|null $ttl
* @param Closure $callback
*
* @return mixed
*/
public function remember($key, $ttl, Closure $callback)
{
$value = $this->get($key);
if (! is_null($value)) {
return $value;
}
$this->put($key, $value = $callback(), $ttl);
return $value;
}
/**
* Delete an item from the cache.
*
* @param string $key
*
* @return bool
*/
public function delete($key)
{
return $this->store->delete($key);
}
/**
* Get the underlying cache store.
*
* @return CacheInterface
*/
public function store()
{
return $this->store;
}
}