fiberphp/cache

FiberPHP cache manager: PSR-16 multi-driver (redis/file/memory) with tag grouping.

Maintainers

Package info

gitee.com/FiberPHP/cache

Issues

pkg:composer/fiberphp/cache

Transparency log

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

dev-master 2026-08-22 08:10 UTC

This package is not auto-updated.

Last update: 2026-08-22 11:17:30 UTC


README

FiberPHP 框架的缓存子包。提供 PSR-16 SimpleCache 实现,支持 redis / file / memory 三种驱动,内置标签(tag)分组、自增自减、pull / push 等扩展方法,通过 config/cache.php 声明式管理多 store。

特性

  • PSR-16:实现 Psr\SimpleCache\CacheInterface,可直接对接 PSR-16 消费方
  • 多驱动:redis(基于 fiberphp/redis Sync)、file(本地落盘)、memory(进程内数组,测试用)
  • 多 store:通过 config/cache.php 的 stores 声明多个独立 store,惰性构建、内存复用
  • 标签分组tag() 链式设置标签上下文,tag()->clear() 按标签批量清除
  • 扩展方法:increment / decrement / pull / push / handler
  • 模板方法AbstractDriver 统一序列化/前缀/标签,子类实现 do* 模板方法

环境要求

  • PHP >= 8.3
  • fiberphp/framework dev-master
  • fiberphp/redis dev-master(redis 驱动)

安装

composer require fiberphp/cache

安装后 PackageInstaller::discover 自动把 config/cache.php 拷贝到应用 config/cache.php(幂等不覆盖),并通过 PackageManifest 注册 CacheProvider

配置

config/cache.php

return [
    // 默认 store
    'default' => 'default',
    // 缓存 store 配置(支持 driver: redis|file|memory)
    'stores' => [
        'default' => [
            'driver'     => 'redis',
            'connection' => 'default', // 对应 config/redis.php 中的连接名
            'prefix'     => 'cache:',
            'expire'     => 0,          // 默认有效期秒数(0 = 永久)
            'tag_expire' => 86400 * 30, // tag 键过期秒数
            'tag_prefix' => 'tag:',
        ],
        // 按需声明更多 store
        // 'file' => ['driver' => 'file', 'path' => runtime_path('cache'), ...],
    ],
];
字段redisfilememory说明
driver驱动类型 redis|file|memory
connectionredis 连接名(对应 config/redis.php)
pathfile 落盘目录(默认 runtime/cache)
prefix缓存键前缀
expire默认有效期秒数(0 = 永久)
tag_expiretag 键过期秒数
tag_prefixtag 键前缀

使用

基础读写(PSR-16)

cache()->set('foo', 'bar');
cache()->get('foo');              // 'bar'
cache()->get('missing', 'def');   // 'def'
cache()->has('foo');              // true
cache()->delete('foo');
cache()->setMultiple(['a' => 1, 'b' => 2]);
cache()->getMultiple(['a', 'b']); // ['a' => 1, 'b' => 2]
cache()->deleteMultiple(['a', 'b']);
cache()->clear();

多 store

cache()->store('default')->set('k', 'v');  // 显式指定 store
cache()->store('file')->get('k');          // 文件 store(需在 config 声明)
cache()->get('k');                         // 走 default store(__call 转发)

标签分组

cache()->tag('users')->set('u:1', 'alice');
cache()->tag('users')->set('u:2', 'bob');
cache()->set('other', 'val');

cache()->tag('users')->clear();  // 只清 users 标签下的键
cache()->get('other');          // 'val'(不受影响)

自增自减

cache()->increment('counter');     // 1
cache()->increment('counter', 2);  // 3
cache()->decrement('counter');     // 2

pull / push

cache()->set('once', 'data');
cache()->pull('once');  // 'data'(读取后立即删除)

cache()->push('list', 'a');
cache()->push('list', 'b');
cache()->push('list', 'a');  // 去重
cache()->get('list');        // ['a', 'b']

获取原生驱动

$driver = cache()->store()->handler();  // DriverInterface
$redis  = cache()->driver();            // 默认 store 的 Redis 驱动(仅 redis 驱动)
$sync   = $redis->connection();        // FiberPHP\Redis\Sync

驱动

驱动底层持久化标签实现适用
redisfiberphp/redis Sync原生 sAdd/sMembers(原子)生产 / 高并发
file本地文件read-modify-write本地开发
memory进程内数组read-modify-write单元测试

启动探活

CacheProvider 在 Worker 启动时访问探针 key 预建立 Redis 连接:

  • 非关键探活:失败仅记录警告,不中断启动(Redis 可用性已由 RedisProvider critical 探活保障)
  • 日志通道:声明 config('log.cache') 时写入 cache 通道,否则写入默认通道

License

MIT