Symfony 6如何启用Doctrine DBAL Cache Adapter作为缓存池及相关疑问
问题
我想把Doctrine DBAL Cache Adapter作为其他缓存方案的降级缓存(fallback),用来存储外部数据,而非Doctrine数据库查询结果。查阅官方文档后没找到以下问题的答案:
- 是否需要手动创建缓存表?还是会自动创建?
- 是否需要指定表名?有没有标准表名?
- 如何传入默认数据库连接?
目前我已经在现有缓存配置中添加了相关配置(如下YAML代码),也完成了代码中数据的存储与读取逻辑,但没找到适配Symfony 6的最新配置示例,只找到Symfony 3等旧版本的PDO缓存示例。
配置代码:
framework: cache: system: cache.adapter.filesystem app: cache.adapter.filesystem pools: cache.sap: adapter: cache.adapter.filesystem cache.pers: adapter: cache.adapter.filesystem cache.db: # <-- 这是新增的配置 adapter: app.cache.adapter.db_cache services: app.cache.adapter.db_cache: parent: 'cache.adapter.doctrine_dbal' tags: - { name: 'cache.pool', namespace: 'sapData', default_lifetime: '0' }
回答
1. 缓存表的创建
Doctrine DBAL Cache Adapter不会自动创建缓存表,需要手动创建。官方推荐的通用表结构(以MySQL为例,可根据数据库类型调整字段类型):
CREATE TABLE cache_items ( id VARCHAR(255) NOT NULL PRIMARY KEY, data LONGBLOB NOT NULL, lifetime INT DEFAULT NULL, created_at INT NOT NULL );
2. 表名与标准命名
- 可以指定表名,若不指定,默认使用
cache_items,这是官方定义的标准表名。 - 自定义表名需在服务配置中传入
$tableName参数:
services: app.cache.adapter.db_cache: parent: 'cache.adapter.doctrine_dbal' arguments: $tableName: 'my_custom_cache_table' # 替换为你的自定义表名 tags: - { name: 'cache.pool', namespace: 'sapData', default_lifetime: '0' }
3. 传入默认数据库连接
默认情况下,cache.adapter.doctrine_dbal会自动使用Symfony的默认数据库连接(即doctrine.dbal.default_connection)。若项目有多个数据库连接,需显式指定:
services: app.cache.adapter.db_cache: parent: 'cache.adapter.doctrine_dbal' arguments: $connection: '@doctrine.dbal.default_connection' # 指定默认连接 tags: - { name: 'cache.pool', namespace: 'sapData', default_lifetime: '0' }
配置优化建议
你的现有配置已可正常工作,可补充连接和表名的显式配置让逻辑更清晰。另外注意default_lifetime: 0表示缓存永不过期,请确认这符合你的业务需求。
内容的提问来源于stack exchange,提问作者Calamity Jane
相关产品推荐
相关产品推荐

