mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-06 10:11:38 +09:00
Add helper classes that implement PSR-6 caching interface with Rhymix cache backend
This commit is contained in:
parent
a898c4281a
commit
dee7ed34e9
2 changed files with 271 additions and 0 deletions
111
common/framework/helpers/CacheItemHelper.php
Normal file
111
common/framework/helpers/CacheItemHelper.php
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
<?php
|
||||
|
||||
namespace Rhymix\Framework\Helpers;
|
||||
|
||||
use Psr\Cache\CacheItemInterface;
|
||||
|
||||
/**
|
||||
* Helper class to implement PSR-6 cache item using Rhymix cache configuration.
|
||||
*/
|
||||
class CacheItemHelper implements CacheItemInterface
|
||||
{
|
||||
/**
|
||||
* Attributes
|
||||
*/
|
||||
public $key = '';
|
||||
public $value = null;
|
||||
public $expires = null;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param string $key
|
||||
*/
|
||||
public function __construct(string $key)
|
||||
{
|
||||
$this->key = $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the key for the current cache item.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getKey()
|
||||
{
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the value of the item from the cache associated with this object's key.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function get()
|
||||
{
|
||||
if ($this->value === null)
|
||||
{
|
||||
$this->value = \Rhymix\Framework\Cache::get($this->key);
|
||||
}
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirms if the cache item lookup resulted in a cache hit.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isHit()
|
||||
{
|
||||
return \Rhymix\Framework\Cache::exists($this->key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value represented by this cache item.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @return static
|
||||
*/
|
||||
public function set($value)
|
||||
{
|
||||
$this->value = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the expiration time for this cache item.
|
||||
*
|
||||
* @param \DateTimeInterface|null $expiration
|
||||
* @return static
|
||||
*/
|
||||
public function expiresAt($expiration)
|
||||
{
|
||||
$this->expires = $expiration->getTimestamp();
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the expiration time for this cache item.
|
||||
*
|
||||
* @param int|\DateInterval|null $time
|
||||
* @return static
|
||||
*/
|
||||
public function expiresAfter($time)
|
||||
{
|
||||
if ($time instanceof \DateInterval)
|
||||
{
|
||||
$date = new \DateTime();
|
||||
$date->add($time);
|
||||
$this->expires = $date->getTimestamp();
|
||||
}
|
||||
elseif (is_int($time))
|
||||
{
|
||||
$this->expires = time() + $time;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->expires = null;
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
160
common/framework/helpers/CacheItemPoolHelper.php
Normal file
160
common/framework/helpers/CacheItemPoolHelper.php
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
<?php
|
||||
|
||||
namespace Rhymix\Framework\Helpers;
|
||||
|
||||
use Psr\Cache\CacheItemInterface;
|
||||
use Psr\Cache\CacheItemPoolInterface;
|
||||
use Psr\Cache\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* Helper class to implement PSR-6 cache item pool using Rhymix cache configuration.
|
||||
*/
|
||||
class CacheItemPoolHelper implements CacheItemPoolInterface
|
||||
{
|
||||
/**
|
||||
* Force persistence even if caching is disabled.
|
||||
*/
|
||||
public $force = false;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param bool $force
|
||||
*/
|
||||
public function __construct(bool $force = false)
|
||||
{
|
||||
$this->force = $force;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a Cache Item representing the specified key.
|
||||
*
|
||||
* @param string $key
|
||||
* @throws InvalidArgumentException
|
||||
* @return CacheItemInterface
|
||||
*/
|
||||
public function getItem($key)
|
||||
{
|
||||
if (!is_scalar($key) || empty($key))
|
||||
{
|
||||
throw new InvalidArgumentException;
|
||||
}
|
||||
return new CacheItemHelper((string)$key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a traversable set of cache items.
|
||||
*
|
||||
* @param string[] $keys
|
||||
* @throws InvalidArgumentException
|
||||
* @return array
|
||||
*/
|
||||
public function getItems(array $keys = [])
|
||||
{
|
||||
$result = [];
|
||||
foreach ($keys as $key)
|
||||
{
|
||||
if (!is_scalar($key) || empty($key))
|
||||
{
|
||||
throw new InvalidArgumentException;
|
||||
}
|
||||
$result[(string)$key] = new CacheItemHelper((string)$key);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirms if the cache contains specified cache item.
|
||||
*
|
||||
* @param string $key
|
||||
* @throws InvalidArgumentException
|
||||
* @return bool
|
||||
*/
|
||||
public function hasItem($key)
|
||||
{
|
||||
return $this->getItem($key)->isHit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all items in the pool.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function clear()
|
||||
{
|
||||
\Rhymix\Framework\Cache::clearAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the item from the pool.
|
||||
*
|
||||
* @param string $key
|
||||
* @throws InvalidArgumentException
|
||||
* @return bool
|
||||
*/
|
||||
public function deleteItem($key)
|
||||
{
|
||||
if (!is_scalar($key) || empty($key))
|
||||
{
|
||||
throw new InvalidArgumentException;
|
||||
}
|
||||
return \Rhymix\Framework\Cache::delete((string)$key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes multiple items from the pool.
|
||||
*
|
||||
* @param string[] $keys
|
||||
* @throws InvalidArgumentException
|
||||
* @return bool
|
||||
*/
|
||||
public function deleteItems(array $keys)
|
||||
{
|
||||
$result = true;
|
||||
foreach ($keys as $key)
|
||||
{
|
||||
if (!is_scalar($key) || empty($key))
|
||||
{
|
||||
throw new InvalidArgumentException;
|
||||
}
|
||||
if (!\Rhymix\Framework\Cache::delete((string)$key))
|
||||
{
|
||||
$result = false;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Persists a cache item immediately.
|
||||
*
|
||||
* @param CacheItemInterface $item
|
||||
* @return bool
|
||||
*/
|
||||
public function save(CacheItemInterface $item)
|
||||
{
|
||||
$ttl = $item->expires ? max(0, min(30 * 86400, $item->expires - time())) : 0;
|
||||
return \Rhymix\Framework\Cache::set($item->key, $item->value, $ttl, $this->force);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a cache item to be persisted later.
|
||||
*
|
||||
* @param CacheItemInterface $item
|
||||
* @return bool
|
||||
*/
|
||||
public function saveDeferred(CacheItemInterface $item)
|
||||
{
|
||||
return $this->save($item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Persists any deferred cache items.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function commit()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue