blob: d7480a7b540e105374bd8defe5322ed0cc19de7c [file] [log] [blame]
<?php
namespace LdapRecord\Query;
use Psr\SimpleCache\CacheInterface;
class ArrayCacheStore implements CacheInterface
{
use InteractsWithTime;
/**
* An array of stored values.
*
* @var array
*/
protected $storage = [];
/**
* @inheritdoc
*/
public function get($key, $default = null)
{
if (! isset($this->storage[$key])) {
return $default;
}
$item = $this->storage[$key];
$expiresAt = $item['expiresAt'] ?? 0;
if ($expiresAt !== 0 && $this->currentTime() > $expiresAt) {
$this->delete($key);
return $default;
}
return $item['value'];
}
/**
* @inheritdoc
*/
public function set($key, $value, $ttl = null)
{
$this->storage[$key] = [
'value' => $value,
'expiresAt' => $this->calculateExpiration($ttl),
];
return true;
}
/**
* Get the expiration time of the key.
*
* @param int $seconds
*
* @return int
*/
protected function calculateExpiration($seconds)
{
return $this->toTimestamp($seconds);
}
/**
* Get the UNIX timestamp for the given number of seconds.
*
* @param int $seconds
*
* @return int
*/
protected function toTimestamp($seconds)
{
return $seconds > 0 ? $this->availableAt($seconds) : 0;
}
/**
* @inheritdoc
*/
public function delete($key)
{
unset($this->storage[$key]);
return true;
}
/**
* @inheritdoc
*/
public function clear()
{
$this->storage = [];
return true;
}
/**
* @inheritdoc
*/
public function getMultiple($keys, $default = null)
{
$values = [];
foreach ($keys as $key) {
$values[$key] = $this->get($key, $default);
}
return $values;
}
/**
* @inheritdoc
*/
public function setMultiple($values, $ttl = null)
{
foreach ($values as $key => $value) {
$this->set($key, $value, $ttl);
}
return true;
}
/**
* @inheritdoc
*/
public function deleteMultiple($keys)
{
foreach ($keys as $key) {
$this->delete($key);
}
return true;
}
/**
* @inheritdoc
*/
public function has($key)
{
return isset($this->storage[$key]);
}
}