70 lines
2.1 KiB
Markdown
Executable File
70 lines
2.1 KiB
Markdown
Executable File
# PSR-6 In-Memory Cache
|
|
|
|
A [PSR-6](https://www.php-fig.org/psr/psr-6/) In-Memory cache that can be used as a default implementation and in tests.
|
|
|
|
[](https://packagist.org/packages/beste/in-memory-cache)
|
|
[](https://packagist.org/packages/beste/in-memory-cache)
|
|
[](https://packagist.org/packages/beste/in-memory-cache/stats)
|
|
[](https://packagist.org/packages/beste/in-memory-cache/stats)
|
|
[](https://github.com/beste/in-memory-cache-php/actions/workflows/tests.yml)
|
|
|
|
## Installation
|
|
|
|
```shell
|
|
composer require beste/in-memory-cache
|
|
```
|
|
|
|
## Usage
|
|
|
|
```php
|
|
use Beste\Cache\InMemoryCache;
|
|
|
|
$cache = new InMemoryCache();
|
|
|
|
$item = $cache->getItem('key');
|
|
|
|
assert($item->isHit() === false);
|
|
assert($item->get() === null);
|
|
|
|
$item->set('value');
|
|
$cache->save($item);
|
|
|
|
// Later...
|
|
|
|
$item = $cache->getItem('key');
|
|
|
|
assert($item->isHit() === true);
|
|
assert($item->get() === 'value');
|
|
```
|
|
|
|
You can also provide your own [PSR-20](https://www.php-fig.org/psr/psr-20/) clock implementation, for example a frozen
|
|
clock for testing, for example from the [`beste/clock` library](https://github.com/beste/clock).
|
|
|
|
```php
|
|
use Beste\Clock\FrozenClock;
|
|
use Beste\Cache\InMemoryCache;
|
|
|
|
$clock = FrozenClock::fromUTC()
|
|
$cache = new InMemoryCache();
|
|
|
|
$item = $cache->getItem('key');
|
|
$item->set('value')->expiresAfter(new DateInterval('PT5M'));
|
|
$cache->save($item);
|
|
|
|
$clock->setTo($clock->now()->add(new DateInterval('PT2M')));
|
|
assert($cache->getItem('key')->isHit() === true);
|
|
|
|
$clock->setTo($clock->now()->add(new DateInterval('PT5M')));
|
|
assert($cache->getItem('key')->isHit() === false);
|
|
```
|
|
|
|
## Running tests
|
|
|
|
```shell
|
|
composer test
|
|
```
|
|
|
|
## License
|
|
|
|
This project is published under the [MIT License](LICENSE).
|