Fix bug with handling of optional expirations, use driver to get multiple items if possible
Some checks failed
Gitea - aviat/banker/pipeline/head There was a failure building this commit
Some checks failed
Gitea - aviat/banker/pipeline/head There was a failure building this commit
This commit is contained in:
parent
fa0fb9ce1c
commit
7c121934a2
@ -60,4 +60,23 @@ abstract class AbstractDriver implements DriverInterface, LoggerAwareInterface {
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set multiple cache values
|
||||
*
|
||||
* @param array $items
|
||||
* @param int|null $expires
|
||||
* @return bool
|
||||
*/
|
||||
public function setMultiple(array $items, ?int $expires = NULL): bool
|
||||
{
|
||||
$setResults = [];
|
||||
foreach ($items as $k => $v)
|
||||
{
|
||||
$setResults[] = $this->set($k, $v, $expires);
|
||||
}
|
||||
|
||||
// Only return true if all the results are true
|
||||
return array_reduce($setResults, fn ($carry, $item) => $item && $carry, TRUE);
|
||||
}
|
||||
}
|
@ -86,13 +86,29 @@ class ApcuDriver extends AbstractDriver {
|
||||
* @param int $expires
|
||||
* @return bool
|
||||
*/
|
||||
public function set(string $key, $value, ?int $expires = 0): bool
|
||||
public function set(string $key, $value, ?int $expires = NULL): bool
|
||||
{
|
||||
$ttl = $this->getTTLFromExpiration($expires);
|
||||
|
||||
return apcu_store($key, $value, $ttl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set multiple cache values
|
||||
*
|
||||
* @param array $items
|
||||
* @param int|null $expires
|
||||
* @return bool
|
||||
*/
|
||||
public function setMultiple(array $items, ?int $expires = NULL): bool
|
||||
{
|
||||
$ttl = $this->getTTLFromExpiration((int)$expires);
|
||||
|
||||
return ($expires === NULL)
|
||||
? apcu_store($items)
|
||||
: apcu_store($items, NULL, $ttl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an item from the cache
|
||||
*
|
||||
@ -153,9 +169,9 @@ class ApcuDriver extends AbstractDriver {
|
||||
* @param int $expires
|
||||
* @return int
|
||||
*/
|
||||
protected function getTTLFromExpiration(int $expires): int
|
||||
protected function getTTLFromExpiration($expires): int
|
||||
{
|
||||
$ttl = $expires - time();
|
||||
$ttl = (int)$expires - time();
|
||||
|
||||
return ($ttl < 0) ? 0 : $ttl;
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ interface DriverInterface {
|
||||
* @param int $expires
|
||||
* @return bool
|
||||
*/
|
||||
public function set(string $key, $value, ?int $expires = 0): bool;
|
||||
public function set(string $key, $value, ?int $expires = NULL): bool;
|
||||
|
||||
/**
|
||||
* Get the value for the selected cache key
|
||||
@ -54,6 +54,15 @@ interface DriverInterface {
|
||||
*/
|
||||
public function getMultiple(array $keys = []): array;
|
||||
|
||||
/**
|
||||
* Set multiple cache values
|
||||
*
|
||||
* @param array $items
|
||||
* @param int|null $expires
|
||||
* @return bool
|
||||
*/
|
||||
public function setMultiple(array $items, ?int $expires = NULL): bool;
|
||||
|
||||
/**
|
||||
* Remove an item from the cache
|
||||
*
|
||||
|
@ -121,9 +121,25 @@ class MemcachedDriver extends AbstractDriver {
|
||||
* @param int $expires
|
||||
* @return bool
|
||||
*/
|
||||
public function set(string $key, $value, ?int $expires = 0): bool
|
||||
public function set(string $key, $value, ?int $expires = NULL): bool
|
||||
{
|
||||
return $this->conn->set($key, $value, $expires);
|
||||
return ($expires === NULL)
|
||||
? $this->conn->set($key, $value)
|
||||
: $this->conn->set($key, $value, $expires);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set multiple cache values
|
||||
*
|
||||
* @param array $items
|
||||
* @param int|null $expires
|
||||
* @return bool
|
||||
*/
|
||||
public function setMultiple(array $items, ?int $expires = NULL): bool
|
||||
{
|
||||
return ($expires === NULL)
|
||||
? $this->conn->setMulti($items)
|
||||
: $this->conn->setMulti($items, $expires);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -72,7 +72,7 @@ class NullDriver extends AbstractDriver {
|
||||
* @param int $expires
|
||||
* @return bool
|
||||
*/
|
||||
public function set(string $key, $value, ?int $expires = 0): bool
|
||||
public function set(string $key, $value, ?int $expires = NULL): bool
|
||||
{
|
||||
$this->store[$key] = $value;
|
||||
return $this->store[$key] === $value;
|
||||
|
@ -88,16 +88,16 @@ class RedisDriver extends AbstractDriver {
|
||||
* @param int $expires
|
||||
* @return bool
|
||||
*/
|
||||
public function set(string $key, $value, ?int $expires = 0): bool
|
||||
public function set(string $key, $value, ?int $expires = NULL): bool
|
||||
{
|
||||
$value = serialize($value);
|
||||
|
||||
if ($expires !== 0)
|
||||
if ($expires !== NULL)
|
||||
{
|
||||
return (bool) $this->conn->set($key, $value, 'EX', $expires);
|
||||
return $this->conn->set($key, $value, 'EX', $expires) === 'OK';
|
||||
}
|
||||
|
||||
return (bool)$this->conn->set($key, $value);
|
||||
return $this->conn->set($key, $value) === 'OK';
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -33,7 +33,7 @@ class ItemCollection extends ArrayIterator implements JsonSerializable {
|
||||
*
|
||||
* @var CacheItemInterface[]
|
||||
*/
|
||||
protected $items = [];
|
||||
protected array $items = [];
|
||||
|
||||
/**
|
||||
* Create the collection object from the raw
|
||||
|
@ -145,6 +145,10 @@ class Teller implements SimpleCache\CacheInterface, LoggerAwareInterface {
|
||||
{
|
||||
$this->validateKeys($values, TRUE);
|
||||
|
||||
return ($ttl === NULL)
|
||||
? $this->driver->setMultiple((array)$values)
|
||||
: $this->driver->setMultiple((array)$values, $ttl);
|
||||
|
||||
$setResults = [];
|
||||
foreach ($values as $k => $v)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user