直接安装 symfony/cache 组件即可,无需全局安装 Symfony;需区分 PSR-6(CacheItemPoolInterface)与 PSR-16(SimpleCacheInterface)的使用场景及实例化方式,RedisAdapter 必须传入持久化连接,PhpFilesAdapter 需显式指定绝对路径缓存目录。

直接装 symfony/cache 就行,不用碰 Composer 全局安装
Composer 是包管理器,不是 Symfony 的安装工具。你不需要“安装 Symfony Cache”这个动作,只需要在项目里引入 symfony/cache 这个组件包。全局装 Composer 本身是前提,但那是另一回事——别被标题带偏。
常见错误现象:composer require symfony/framework-bundle 后发现没缓存类、CacheInterface 找不到,其实是只装了框架骨架,没装缓存组件本身。
- 执行
composer require symfony/cache即可(推荐 v6.4+ 或 v7.x,兼容 PHP 8.1+) - 如果项目已用 Symfony Flex,它会自动注册缓存服务;纯 PHP 项目则需手动实例化
- 不要装
symfony/symfony(全量包),臃肿且已废弃
PSR-6 和 PSR-16 实例不能混用,但可以共存
symfony/cache 同时实现两个标准,但接口职责不同:PSR-6 是「缓存池 + 缓存项」模型,PSR-16 是「简单键值对」模型。它们底层可共享同一存储(比如 Redis),但 API 完全隔离。
使用场景:写 SDK 或通用工具函数,优先用 Psr\SimpleCache\CacheInterface(PSR-16);做 Symfony 应用或需要细粒度控制(TTL、标签、延迟写入),选 Psr\Cache\CacheItemPoolInterface(PSR-6)。
- PSR-16 实例:用
new \Symfony\Component\Cache\Adapter\PhpFilesAdapter()不行,得用new \Symfony\Component\Cache\Simple\PhpFilesCache() - PSR-6 实例:同名 Adapter 类(如
RedisAdapter)返回的是 Pool,不是 SimpleCache - 别试图把 PSR-6 的
CacheItemPoolInterface强转成 PSR-16 接口——类型不兼容,运行时报错
RedisAdapter 默认不走持久连接,高并发下容易打满连接数
用 Redis 做后端时,RedisAdapter 默认每次操作都新建 Redis 连接,不是复用。线上环境若每秒请求上百,Redis 连接数可能瞬间飙到上千,触发 maxclients 拒绝。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
性能影响:本地开发看不出问题,一上生产就变慢甚至超时;错误信息类似 Connection refused 或 Redis server went away。
- 必须显式传入一个持久化的
Predis\Client或Redis实例(启用pconnect) - 示例:
new RedisAdapter(new \Predis\Client('tcp://127.0.0.1:6379'), 'my_cache', 0) - PHP 内置
Redis扩展更推荐:$redis = new \Redis(); $redis->pconnect('127.0.0.1', 6379); new RedisAdapter($redis) - 别依赖
RedisAdapter::createConnection()的默认行为——它不持久
文件缓存(PhpFilesAdapter)在 CLI 和 Web 环境下路径不一致
这个 Adapter 把缓存编译成 PHP 文件存在磁盘,但 CLI 脚本和 Web 请求的当前工作目录(getcwd())往往不同,导致缓存写到错地方、读不到、重复生成。
常见错误现象:Web 页面能命中缓存,命令行跑 php bin/console cache:clear 却提示“缓存未找到”,或者反过来;var/cache/dev/ 下出现多个 cache- 开头的临时目录。
- 必须显式指定缓存目录,比如
new PhpFilesAdapter('app', 0, '/tmp/myapp_cache') - 路径要绝对,别用相对路径或
__DIR__—— CLI 和 Web 的__DIR__可能指向不同位置 - 确保该目录 Web 用户和 CLI 用户都有读写权限(尤其 Linux 上 www-data vs 当前用户)
- 开发环境慎用文件缓存做“热重载”测试——OPcache 可能缓存旧文件,导致行为不一致
缓存最难的从来不是怎么写那一行 set(),而是确认你用的 Adapter 真正在用你认为的那个后端,以及那个后端的状态是否被其他进程悄悄改写了。

















