PHPackages                             swoole-kit/cache - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Caching](/categories/caching)
4. /
5. swoole-kit/cache

ActiveLibrary[Caching](/categories/caching)

swoole-kit/cache
================

易用的缓存工具类(FileSystem/Redis/Memcahced/SwooleTable)支持协程特性

v0.1.0-alpha(6y ago)02[1 issues](https://github.com/swoole-kit/swoolekit-cache/issues)Apache-2.0PHP

Since Sep 6Pushed 6y agoCompare

[ Source](https://github.com/swoole-kit/swoolekit-cache)[ Packagist](https://packagist.org/packages/swoole-kit/cache)[ RSS](/packages/swoole-kit-cache/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (1)Dependencies (4)Versions (2)Used By (0)

Coroutine Cache
===============

[](#coroutine-cache)

一个轻量级(PSR-16规范)的缓存实现，目前已支持 File Redis Memcached SwooleTable 四种储存模式

### 安装

[](#安装)

> composer require swoole-kit/cache

### 快速开始

[](#快速开始)

支持开箱即用的快速缓存，默认使用File驱动，该驱动可以通用协程与非协程模式，所有内置驱动均以PSR16规范实现，静态调用时默认均为调用default驱动，当没有手动注册default驱动时，默认的default驱动为File驱动

```
use SwooleKit\Cache\Cache;

$ttl = 10;  // 单位秒
$cacheKey = 'cacheKey';
$cacheValue = 'cacheValue';
$defaultValue = 'defaultValue';

Cache::clear();
Cache::has($cacheKey);
Cache::delete($cacheKey);
Cache::set($cacheKey, $cacheValue, $ttl);
Cache::get($cacheKey, $defaultValue);
Cache::setMultiple(['CacheKey1' => 'CacheValue1',], $ttl);
Cache::getMultiple(['CacheKey1'], $defaultValue);
Cache::deleteMultiple(['CacheKey1']);
```

### 注册驱动

[](#注册驱动)

系统提供了四种默认驱动，除文件驱动可以在非Swoole环境使用，其他驱动因使用了Sw相关特性或客户端实现，必须在Swoole环境下使用

### 文件驱动

[](#文件驱动)

文件驱动是最洒脱(无任何依赖通杀所有环节)的驱动，性能较其他驱动相对来说比较低，这里演示文件驱动的注册方法，其他驱动的注册方法一致，只是配置项上会有区别

```
// 请注意先Use要使用的驱动类和配置类
use SwooleKit\Cache\Config\FileConfig;
use SwooleKit\Cache\Drivers\File as FileDriver;

// 也可以不传入Config 自动使用下面的默认值
$fileDriver = new FileDriver((new FileConfig([
    'cachePath'     => sys_get_temp_dir(),   // 缓存目录(默认为PHP系统缓存)
    'cachePrefix'   => null, // 默认的缓存前缀 不同前缀分目录存放
    'defaultExpire' => 0,    // 默认过期时间 设置为0永不过期
])));

// 注册驱动时不指定驱动名称，则为注册default驱动
// 仅default驱动可以多次注册，实际调用最后一次注册的default驱动
// 其他驱动名称仅允许注册一次，不允许重复注册相同名称的驱动
Cache::instance()->addDriver($fileDriver,'default');

// 从缓存管理器单例中获取任意名字的驱动，不指定名字为获取default驱动
$cache = Cache::instance()->getDriver('default');
```

### Redis驱动

[](#redis驱动)

该驱动使用Swoole内置的Redis协程客户端，内部已实现自动连接池管理，可以在协程模式下安全的使用

> 注意: 当一次请求存在多个协程时(比如说手动create了协程)，则会为每一个协程都分配一个链接，Memcache驱动也一样，实际上不会影响使用，因为并没有用到事务相关特性:)，但需要注意避免创建大量嵌套协程导致瞬间取空连接池

```
// 请注意先Use要使用的驱动类和配置类
use SwooleKit\Cache\Config\RedisConfig;
use SwooleKit\Cache\Drivers\Redis as RedisDriver;

// 需要协程环境(在EasySwoole框架内无需手动创建协程)
Coroutine::create(function () {

    // Redis的Config可以同时配置链接池相关的设置项
    $redisDriver = new RedisDriver((new RedisConfig([

        // 链接配置项
        'db'                => 0,           // 有多个DB时可以选择使用的DB 默认选择0号DB
        'host'              => '127.0.0.1', // 默认是连接本地Redis
        'port'              => 6379,        // 默认的端口
        'auth'              => null,        // 默认没有密码
        'connectTimeout'    => 1,           // 连接到服务器的超时时间
        'execTimeout'       => 1,           // 执行操作的超时时间
        'reconnect'         => 3,           // 如果连接断开自动尝试x次重连

        // 链接池配置项
        'intervalCheckTime' => 30 * 1000,   // 池对象回收检测周期
        'maxIdleTime'       => 15,          // 连接最大空闲时间(超时释放)
        'maxObjectNum'      => 20,          // 池最大连接象数量
        'minObjectNum'      => 5,           // 保持的最小连接数量
        'getObjectTimeout'  => 3.0          // 池为空时获取连接最大等待时间

    ])));

    Cache::instance()->addDriver($redisDriver, 'redis');
    $cache = Cache::instance()->getDriver('redis');
});
```

### Memcache驱动

[](#memcache驱动)

以Swoole的协程Client实现了Memcache的TCP二进制驱动，不依赖PHP本身的Memcached驱动和libmemcache，同样需要协程环境，二进制协议仅支持Memcached(即Server)v1.3版本以上

```
// 请注意先Use要使用的驱动类和配置类
use SwooleKit\Cache\Config\MemcacheConfig;
use SwooleKit\Cache\Drivers\Memcache as MemcacheDriver;

// 需要协程环境(在EasySwoole框架内无需手动创建协程)
Coroutine::create(function () {

    // Memcache的Config可以同时配置链接池相关的设置项
    $memcacheDriver = new MemcacheDriver((new MemcacheConfig([

        // 链接配置项
        'host'              => '127.0.0.1',  // 默认是连接本地Memcache
        'port'              => 11211,        // 默认的端口

        // 链接池配置项
        'intervalCheckTime' => 30 * 1000,   // 池对象回收检测周期
        'maxIdleTime'       => 15,          // 连接最大空闲时间(超时释放)
        'maxObjectNum'      => 20,          // 池最大连接象数量
        'minObjectNum'      => 5,           // 保持的最小连接数量
        'getObjectTimeout'  => 3.0          // 池为空时获取连接最大等待时间

    ])));

    Cache::instance()->addDriver($memcacheDriver, 'memcache');
    $cache = Cache::instance()->getDriver('memcache');
});
```

### SwooleTable

[](#swooletable)

基于SwooleTable内存表实现的快速内存缓存，注意该缓存暂不支持数据落地，服务停止后缓存数据会立即丢失，适用于做一些计数器类或能容忍缓存重建而不雪崩的一些场景(如储存公众号Token等)，由于Table创建时需要立即申请内存，请确保足够的内存，否则会因Table创建失败导致不可用

> 注意: 由于Swoole进程隔离特性，当使用SwooleTable作为驱动时，需要在Sw的全局期进行驱动的初始化，否则缓存数据会被隔离在各个独立的Worker进程中，另外各配置项受到SwooleTable本身的限制，不能超过本身的限制最大值

```
// 请注意先Use要使用的驱动类和配置类
use SwooleKit\Cache\Config\SwooleTableConfig;
use SwooleKit\Cache\Drivers\SwooleTable as SwooleTableDriver;

// 需要协程环境(在EasySwoole框架内无需手动创建协程)
Coroutine::create(function () {

    // 可以配置Table相关的一些配置项
    $memcacheDriver = new SwooleTableDriver((new SwooleTableConfig([

        'tableSize'          => 4096,  // 能容纳的总Key数量(由于哈希冲突，实际储存量会比该值小一点)
        'maxKeySize'         => 512,   // Key支持的最大长度(字节)
        'maxValueSize'       => 4096,  // Value支持的最大长度(字节)
        'recycleInterval'    => 1000,  // 超时Key回收周期(ms)
        'conflictProportion' => 0.2,   // 允许哈希冲突的最大比例

    ])));

    Cache::instance()->addDriver($memcacheDriver, 'swTable');
    $cache = Cache::instance()->getDriver('swTable');
});
```

### 关于配置项

[](#关于配置项)

配置项均由EasySwoole/Spl/SplBean实现，因此可以链式设置和获取

```
use SwooleKit\Cache\Config\SwooleTableConfig;

$tableConfig = new SwooleTableConfig;

$tableConfig
    ->setTableSize(4096)
    ->setMaxKeySize(512)
    ->setMaxValueSize(512);
```

### 单元测试

[](#单元测试)

尚未支持单元测试，欢迎提交Pull Request!

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity2

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 68.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2442d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/a3db54e1883293e6fb7b4f471e66cf5011e508581f4eedc0332e7db952e9bb1c?d=identicon)[evalor](/maintainers/evalor)

---

Top Contributors

[![evalor](https://avatars.githubusercontent.com/u/26944445?v=4)](https://github.com/evalor "evalor (15 commits)")[![littlelw](https://avatars.githubusercontent.com/u/27480308?v=4)](https://github.com/littlelw "littlelw (7 commits)")

### Embed Badge

![Health badge](/badges/swoole-kit-cache/health.svg)

```
[![Health](https://phpackages.com/badges/swoole-kit-cache/health.svg)](https://phpackages.com/packages/swoole-kit-cache)
```

###  Alternatives

[laminas/laminas-cache

Caching implementation with a variety of storage options, as well as codified caching strategies for callbacks, classes, and output

1076.9M130](/packages/laminas-laminas-cache)[cache/adapter-common

Common classes for PSR-6 adapters

11124.4M38](/packages/cache-adapter-common)[cache/filesystem-adapter

A PSR-6 cache implementation using filesystem. This implementation supports tags

705.8M82](/packages/cache-filesystem-adapter)[cache/array-adapter

A PSR-6 cache implementation using a php array. This implementation supports tags

548.3M151](/packages/cache-array-adapter)[cache/redis-adapter

A PSR-6 cache implementation using Redis (PhpRedis). This implementation supports tags

523.9M27](/packages/cache-redis-adapter)[cache/simple-cache-bridge

A PSR-6 bridge to PSR-16. This will make any PSR-6 cache compatible with SimpleCache.

423.1M27](/packages/cache-simple-cache-bridge)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
