一个综合的PSR-16缓存应用程序

1.0.0 2024-08-01 16:28 UTC

This package is not auto-updated.

Last update: 2024-09-27 15:36:53 UTC


README

概述

紫光缓存库为您的应用程序提供了一个灵活的缓存机制,支持各种缓存类型,包括Redis、基于文件的缓存和内存缓存。这个库遵循PSR-16缓存接口以确保标准化和易于使用。

安装

要安装紫光缓存库,请使用Composer

composer require purpleharmonie/cache

缓存类型

Redis缓存

使用Redis进行存储的缓存实现。

文件缓存

使用文件系统进行存储的缓存实现。

内存缓存

使用应用程序内存进行存储的缓存实现。

工厂类:PurpleCacheFactory

PurpleCacheFactory类负责创建不同缓存类型的实例。它提供了一个方法createCache,该方法接受缓存类型和一个可选的配置数组。

用法

创建Redis缓存

use Purple\Libs\Cache\Factory\PurpleCacheFactory;

$redisCache = PurpleCacheFactory::createCache('redis', [
    'redis' => ['host' => 'localhost', 'port' => 6379],
    'defaultTtl' => 7200,
    'maxSize' => 1000,
    'evictionPolicy' => 'LFU'
]);

创建文件缓存

$fileCache = PurpleCacheFactory::createCache('file', [
    'cacheDir' => '/path/to/cache',
    'defaultTtl' => 3600,
    'maxSize' => 500,
    'evictionPolicy' => 'LRU'
]);

创建内存缓存

$memoryCache = PurpleCacheFactory::createCache('memory', [
    'defaultTtl' => 1800,
    'maxSize' => 200,
    'evictionPolicy' => 'LFU'
]);

缓存接口

PSR-16方法

所有缓存实现(RedisCache、FileCache、InMemoryCache)都遵循Psr\SimpleCache\CacheInterface。以下是可用的方法:

  • get($key, $default = null)
  • set($key, $value, $ttl = null): bool
  • delete($key): bool
  • clear(): bool
  • getMultiple($keys, $default = null): iterable
  • setMultiple($values, $ttl = null): bool
  • deleteMultiple($keys): bool
  • has($key): bool

示例:FileCache

FileCache类提供了一个基于文件的缓存机制。

构造函数

public function __construct(string $cacheDir, int $defaultTtl = 3600, int $maxSize = 100, string $evictionPolicy = 'LRU')
  • $cacheDir:缓存文件存储的目录。
  • $defaultTtl:缓存项的默认生存时间(TTL)。
  • $maxSize:缓存中的最大项目数。
  • $evictionPolicy:驱逐策略(LRULFU)。

方法

get($key, $default = null)

检索缓存项的值。

set($key, $value, $ttl = null): bool

将值存储在缓存中。

delete($key): bool

删除缓存项。

clear(): bool

清除整个缓存。

getMultiple($keys, $default = null): iterable

检索多个缓存项。

setMultiple($values, $ttl = null): bool

在缓存中存储多个值。

deleteMultiple($keys): bool

删除多个缓存项。

has($key): bool

检查缓存项是否存在。

getMetrics(): array

返回缓存指标,如命中次数、未命中次数、命中率、项目数。

配置

Redis缓存配置

  • redis:包含Redis连接参数的数组。
  • defaultTtl:缓存项的默认生存时间。
  • maxSize:缓存中的最大项目数。
  • evictionPolicy:驱逐策略(LRULFU)。

文件缓存配置

  • cacheDir:存储缓存文件的目录。
  • defaultTtl:缓存项的默认生存时间。
  • maxSize:缓存中的最大项目数。
  • evictionPolicy:驱逐策略(LRULFU)。

内存缓存配置

  • defaultTtl:缓存项的默认生存时间。
  • maxSize:缓存中的最大项目数。
  • evictionPolicy:驱逐策略(LRULFU)。

驱逐策略

LRU(最近最少使用)

首先驱逐最不常访问的项。

LFU(最少使用频率)

首先驱逐最少使用频率的项。

元数据管理

FileCache类管理元数据以跟踪缓存项的访问和频率。元数据存储在缓存目录内的文件(metadata.php)中。

方法

  • loadMetadata():从元数据文件加载元数据。
  • saveMetadata():将元数据保存到元数据文件。
  • updateMetadata(string $key, string $operation):更新缓存项的元数据。

指标

每个缓存实现的getMetrics()方法返回一个缓存指标数组

  • hitCount:缓存命中的次数。
  • missCount:缓存未命中的次数。
  • hitRatio:命中与总请求数的比率。
  • itemCount:缓存中项目数量。

示例

$metrics = $fileCache->getMetrics();
echo "Hit Count: " . $metrics['hitCount'] . "\n";
echo "Miss Count: " . $metrics['missCount'] . "\n";
echo "Hit Ratio: " . $metrics['hitRatio'] . "\n";
echo "Item Count: " . $metrics['itemCount'] . "\n";

错误处理

该库对于无效的缓存键和配置会抛出InvalidArgumentException异常。请确保在您的应用程序代码中处理这些异常。

结论

紫色缓存库提供了一种健壮的缓存解决方案,支持Redis、基于文件和内存缓存。通过遵循PSR-16标准,它确保了与其他库和框架的互操作性和易于集成。根据您应用程序的需求配置和使用最适合的缓存,并使用淘汰策略和指标跟踪来有效地管理缓存。