drift/react-key-value

轻量级库,为您的 ReactPHP 应用程序提供动态和智能本地缓存。

0.1.0 2021-04-29 15:02 UTC

This package is auto-updated.

Last update: 2024-08-29 06:01:42 UTC


README

CircleCI

这是一个简单的键值本地缓存,适用于您的 ReactPHP 项目

设置键

您可以在缓存中根据键设置值。听起来很简单。

use React\EventLoop\Factory;
use Drift\Cache\LocalKeyValueCache;

$loop = Factory::create();
$cache = new LocalKeyValueCache($loop);
$cache->set('my_key', 'Any value');

定义 TTL

您可以为这个键添加 TTL。在 n 秒后,这个键将被自动删除。

use React\EventLoop\Factory;
use Drift\Cache\LocalKeyValueCache;

$loop = Factory::create();
$ttl = 0.1; // Means 0.1 second (100 milliseconds)
$cache = new LocalKeyValueCache($loop);
$cache->set('my_key', 'Any value', $ttl);

获取键

您可以通过键从这个缓存中获取值。如果值在缓存中,则将返回该值,无需任何转换。否则,将返回 null。

use React\EventLoop\Factory;
use Drift\Cache\LocalKeyValueCache;

$loop = Factory::create();
$cache = new LocalKeyValueCache($loop);
$cache->set('my_key', 'Any value');
$value = $cache->get('my_key');

访问时刷新 TTL

TTL 可以提供一种基本清理几乎不使用元素的方法。通过在 TTL 中定义值,默认情况下,这个键将在 n 秒后删除,无论这个键在此之前的请求次数有多少。如果我们想要在每次访问键时自动刷新这个 TTL,我们可以使用这个功能。

在这个示例中,我们可以看到键被定义为 2 秒的 TTL,并且每秒请求一次,启用了 refreshTTL 标志。在正常情况下,2 秒后 get 方法应该返回 null,但由于我们强制在访问键时刷新这个 TTL,只要我们没有超过 2 秒的时间间隔,我们的键总是会可用。

use React\EventLoop\Factory;
use Drift\Cache\LocalKeyValueCache;

$loop = Factory::create();
$cache = new LocalKeyValueCache($loop);
$ttl = 2; // Means 2 seconds
$cache->set('my_key', 'Any value');

// ... After 1 second
$value = $cache->get('my_key', true); // Found

// ... After 1 second
$value = $cache->get('my_key', true); // Found

// ... After 1 second
$value = $cache->get('my_key', true); // Found

// ... After 3 second
$value = $cache->get('my_key', true); // Not Found

使用这种策略,您将只保存最频繁使用的本地值,从而在缓存效率和存储大小之间找到良好的平衡。

删除键

您可以手动删除键。如果键在缓存中没有找到,则不会发生任何事情。

use React\EventLoop\Factory;
use Drift\Cache\LocalKeyValueCache;

$loop = Factory::create();
$cache = new LocalKeyValueCache($loop);
$cache->delete('my_key');

使用中间件

在您的应用程序中,您可能希望将此缓存用作简单且薄的中间件层,这样您就可以轻松启用和禁用,而无需更改您的领域实现。

那么您应该使用 KeyValueCacheMiddleware 类,作为一个解耦的中间件部分。

因此,拥有这个原始的 PHP 代码

return $this
    ->dbConnection
    ->find('token', '123');

您可以轻松添加一个简单的层,缓存时间为 10 分钟,每次键被请求时更新键的新鲜度。

use React\EventLoop\Factory;
use Drift\Cache\LocalKeyValueCache;
use Drift\Cache\KeyValueCacheMiddleware;

$loop = Factory::create();
$ttl = 600; // 10 minutes
$cache = new LocalKeyValueCache($loop);
$middleware = new KeyValueCacheMiddleware($cache);

return $middleware->getOrAsk('token_123', function() {
    return $this
        ->dbConnection
        ->find('token', '123');
}, $ttl, true);