{"id":18333785,"url":"https://github.com/easy-swoole/cache","last_synced_at":"2025-10-12T19:10:55.280Z","repository":{"id":52199471,"uuid":"110963506","full_name":"easy-swoole/cache","owner":"easy-swoole","description":"配合easySwoole使用的轻量级缓存驱动","archived":false,"fork":false,"pushed_at":"2021-05-05T15:42:07.000Z","size":110,"stargazers_count":15,"open_issues_count":1,"forks_count":8,"subscribers_count":2,"default_branch":"3.1","last_synced_at":"2025-04-07T09:52:45.379Z","etag":null,"topics":["cache","easyswoole","memcache","memcached","redis"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/easy-swoole.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-11-16T11:30:16.000Z","updated_at":"2024-12-16T08:05:48.000Z","dependencies_parsed_at":"2022-09-05T07:10:56.268Z","dependency_job_id":null,"html_url":"https://github.com/easy-swoole/cache","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/easy-swoole/cache","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easy-swoole%2Fcache","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easy-swoole%2Fcache/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easy-swoole%2Fcache/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easy-swoole%2Fcache/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/easy-swoole","download_url":"https://codeload.github.com/easy-swoole/cache/tar.gz/refs/heads/3.1","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easy-swoole%2Fcache/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279012641,"owners_count":26085158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cache","easyswoole","memcache","memcached","redis"],"created_at":"2024-11-05T19:44:40.500Z","updated_at":"2025-10-12T19:10:55.271Z","avatar_url":"https://github.com/easy-swoole.png","language":"PHP","readme":"Coroutine Cache\n======\n\n[![StyleCI](https://styleci.io/repos/110963506/shield?style=flat\u0026branch=master)](https://styleci.io/repos/110963506)\n[![Latest Stable Version](https://poser.pugx.org/easyswoole/cache/version)](https://packagist.org/packages/easyswoole/cache)\n[![Total Downloads](https://poser.pugx.org/easyswoole/cache/downloads)](https://packagist.org/packages/easyswoole/cache)\n[![Latest Unstable Version](https://poser.pugx.org/easyswoole/cache/v/unstable)](//packagist.org/packages/easyswoole/cache)\n[![License](https://poser.pugx.org/easyswoole/cache/license)](https://packagist.org/packages/easyswoole/cache)\n\n一个轻量级(PSR-16规范)的缓存实现，目前已支持 File Redis Memcached SwooleTable 四种储存模式\n\n### 安装\n\n\u003e composer require easyswoole/cache\n\n### 快速开始\n\n支持开箱即用的快速缓存，默认使用File驱动，该驱动可以通用协程与非协程模式，所有内置驱动均以PSR16规范实现，静态调用时默认均为调用default驱动，当没有手动注册default驱动时，默认的default驱动为File驱动\n\n```php\n\nuse EasySwoole\\Cache\\Cache;\n\n$ttl = 10;  // 单位秒\n$cacheKey = 'cacheKey';\n$cacheValue = 'cacheValue';\n$defaultValue = 'defaultValue';\n\nCache::clear();\nCache::has($cacheKey);\nCache::delete($cacheKey);\nCache::set($cacheKey, $cacheValue, $ttl);\nCache::get($cacheKey, $defaultValue);\nCache::setMultiple(['CacheKey1' =\u003e 'CacheValue1',], $ttl);\nCache::getMultiple(['CacheKey1'], $defaultValue);\nCache::deleteMultiple(['CacheKey1']);\n\n```\n\n### 注册驱动\n\n系统提供了四种默认驱动，除文件驱动可以在非Swoole环境使用，其他驱动因使用了Sw相关特性或客户端实现，必须在Swoole环境下使用\n\n### 文件驱动\n\n文件驱动是最洒脱(无任何依赖通杀所有环节)的驱动，性能较其他驱动相对来说比较低，这里演示文件驱动的注册方法，其他驱动的注册方法一致，只是配置项上会有区别\n\n```php\n\n// 请注意先Use要使用的驱动类和配置类\nuse EasySwoole\\Cache\\Config\\FileConfig;\nuse EasySwoole\\Cache\\Drivers\\File as FileDriver;\n\n// 也可以不传入Config 自动使用下面的默认值\n$fileDriver = new FileDriver((new FileConfig([\n    'cachePath'     =\u003e sys_get_temp_dir(),   // 缓存目录(默认为PHP系统缓存)\n    'cachePrefix'   =\u003e null, // 默认的缓存前缀 不同前缀分目录存放\n    'defaultExpire' =\u003e 0,    // 默认过期时间 设置为0永不过期\n])));\n\n// 注册驱动时不指定驱动名称，则为注册default驱动\n// 仅default驱动可以多次注册，实际调用最后一次注册的default驱动\n// 其他驱动名称仅允许注册一次，不允许重复注册相同名称的驱动\nCache::instance()-\u003eaddDriver($fileDriver,'default');\n\n// 从缓存管理器单例中获取任意名字的驱动，不指定名字为获取default驱动\n$cache = Cache::instance()-\u003egetDriver('default');\n\n```\n\n### Redis驱动\n\n该驱动使用Swoole内置的Redis协程客户端，内部已实现自动连接池管理，可以在协程模式下安全的使用\n\n\u003e 注意: 当一次请求存在多个协程时(比如说手动create了协程)，则会为每一个协程都分配一个链接，Memcache驱动也一样，实际上不会影响使用，因为并没有用到事务相关特性:)，但需要注意避免创建大量嵌套协程导致瞬间取空连接池\n\n```php\n\n// 请注意先Use要使用的驱动类和配置类\nuse EasySwoole\\Cache\\Config\\RedisConfig;\nuse EasySwoole\\Cache\\Drivers\\Redis as RedisDriver;\n\n// 需要协程环境(在EasySwoole框架内无需手动创建协程)\nCoroutine::create(function () {\n\n    // Redis的Config可以同时配置链接池相关的设置项\n    $redisDriver = new RedisDriver((new RedisConfig([\n\n        // 链接配置项\n        'db'                =\u003e 0,           // 有多个DB时可以选择使用的DB 默认选择0号DB\n        'host'              =\u003e '127.0.0.1', // 默认是连接本地Redis\n        'port'              =\u003e 6379,        // 默认的端口\n        'auth'              =\u003e null,        // 默认没有密码\n        'connectTimeout'    =\u003e 1,           // 连接到服务器的超时时间\n        'execTimeout'       =\u003e 1,           // 执行操作的超时时间\n        'reconnect'         =\u003e 3,           // 如果连接断开自动尝试x次重连\n\n        // 链接池配置项\n        'intervalCheckTime' =\u003e 30 * 1000,   // 池对象回收检测周期\n        'maxIdleTime'       =\u003e 15,          // 连接最大空闲时间(超时释放)\n        'maxObjectNum'      =\u003e 20,          // 池最大连接象数量\n        'minObjectNum'      =\u003e 5,           // 保持的最小连接数量\n        'getObjectTimeout'  =\u003e 3.0          // 池为空时获取连接最大等待时间\n\n    ])));\n\n    Cache::instance()-\u003eaddDriver($redisDriver, 'redis');\n    $cache = Cache::instance()-\u003egetDriver('redis');\n});\n\n```\n\n### Memcache驱动\n\n以Swoole的协程Client实现了Memcache的TCP二进制驱动，不依赖PHP本身的Memcached驱动和libmemcache，同样需要协程环境，二进制协议仅支持Memcached(即Server)v1.3版本以上\n\n```php\n\n// 请注意先Use要使用的驱动类和配置类\nuse EasySwoole\\Cache\\Config\\MemcacheConfig;\nuse EasySwoole\\Cache\\Drivers\\Memcache as MemcacheDriver;\n\n// 需要协程环境(在EasySwoole框架内无需手动创建协程)\nCoroutine::create(function () {\n\n    // Memcache的Config可以同时配置链接池相关的设置项\n    $memcacheDriver = new MemcacheDriver((new MemcacheConfig([\n\n        // 链接配置项\n        'host'              =\u003e '127.0.0.1',  // 默认是连接本地Memcache\n        'port'              =\u003e 11211,        // 默认的端口\n\n        // 链接池配置项\n        'intervalCheckTime' =\u003e 30 * 1000,   // 池对象回收检测周期\n        'maxIdleTime'       =\u003e 15,          // 连接最大空闲时间(超时释放)\n        'maxObjectNum'      =\u003e 20,          // 池最大连接象数量\n        'minObjectNum'      =\u003e 5,           // 保持的最小连接数量\n        'getObjectTimeout'  =\u003e 3.0          // 池为空时获取连接最大等待时间\n\n    ])));\n\n    Cache::instance()-\u003eaddDriver($memcacheDriver, 'memcache');\n    $cache = Cache::instance()-\u003egetDriver('memcache');\n});\n\n```\n\n### SwooleTable\n\n基于SwooleTable内存表实现的快速内存缓存，注意该缓存暂不支持数据落地，服务停止后缓存数据会立即丢失，适用于做一些计数器类或能容忍缓存重建而不雪崩的一些场景(如储存公众号Token等)，由于Table创建时需要立即申请内存，请确保足够的内存，否则会因Table创建失败导致不可用\n\n\u003e 注意: 由于Swoole进程隔离特性，当使用SwooleTable作为驱动时，需要在Sw的全局期进行驱动的初始化，否则缓存数据会被隔离在各个独立的Worker进程中，另外各配置项受到SwooleTable本身的限制，不能超过本身的限制最大值\n\n```php\n\n// 请注意先Use要使用的驱动类和配置类\nuse EasySwoole\\Cache\\Config\\SwooleTableConfig;\nuse EasySwoole\\Cache\\Drivers\\SwooleTable as SwooleTableDriver;\n\n// 需要协程环境(在EasySwoole框架内无需手动创建协程)\nCoroutine::create(function () {\n\n    // 可以配置Table相关的一些配置项\n    $swooleTableDriver = new SwooleTableDriver((new SwooleTableConfig([\n\n        'tableSize'          =\u003e 4096,  // 能容纳的总Key数量(由于哈希冲突，实际储存量会比该值小一点)\n        'maxKeySize'         =\u003e 512,   // Key支持的最大长度(字节)\n        'maxValueSize'       =\u003e 4096,  // Value支持的最大长度(字节)\n        'recycleInterval'    =\u003e 1000,  // 超时Key回收周期(ms)\n        'conflictProportion' =\u003e 0.2,   // 允许哈希冲突的最大比例\n\n    ])));\n\n    Cache::instance()-\u003eaddDriver($swooleTableDriver, 'swTable');\n    $cache = Cache::instance()-\u003egetDriver('swTable');\n});\n\n```\n\n### 关于配置项\n\n配置项均由EasySwoole/Spl/SplBean实现，因此可以链式设置和获取\n\n```php\n\nuse EasySwoole\\Cache\\Config\\SwooleTableConfig;\n\n$tableConfig = new SwooleTableConfig;\n\n$tableConfig\n    -\u003esetTableSize(4096)\n    -\u003esetMaxKeySize(512)\n    -\u003esetMaxValueSize(512);\n\n```\n\n### 单元测试\n\n尚未支持单元测试，欢迎提交Pull Request!\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasy-swoole%2Fcache","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feasy-swoole%2Fcache","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasy-swoole%2Fcache/lists"}