tedivm / stash-bundle
将 Stash 缓存库集成到 Symfony。
Requires
- php: ^7 || ^8
- symfony/config: ^3.4 || ^4.0 || ^5.0
- symfony/dependency-injection: ^3.4 || ^4.0 || ^5.0
- symfony/http-kernel: ^3.4 || ^4.0 || ^5.0
- tedivm/stash: >=0.15
Requires (Dev)
README
TedivmStashBundle 将 Stash 缓存库 集成到 Symfony,为各种缓存引擎提供强大的抽象。此包提供缓存服务,将 Stash 信息添加到 Web Profiler 工具栏,并添加了 Doctrine Common Cache 库的集成。
此包和 Stash 都采用新 BSD 许可证。请在 Github 上 fork 我们!
安装
使用 composer 添加此包,可以在命令行中要求它
composer require tedivm/stash-bundle
或者在您的 composer.json
文件中直接添加它
"require": { "tedivm/stash-bundle": "0.7.*" }
将包添加到 app/AppKernel.php
public function registerBundles() { return array( new Tedivm\StashBundle\TedivmStashBundle(), ); }
然后在 app/config/config.yml
中设置基本配置
stash: ~
使用
获取默认缓存池服务
$pool = $this->container->get('stash');
或自定义定义的缓存池
$pool = $this->container->get('stash.custom_cache');
然后您可以直接使用缓存服务
$item = $pool->getItem($id, 'info'); // cache keys, more than one can be used $info = $item->get(); if($item->isMiss()) { $info = loadInfo($id); $item->set($userInfo, 60); // second parameter is TTL (in seconds or future \Datetime object) } return $info;
(有关使用缓存服务的更多信息,请参阅 Stash 文档。)
配置
默认缓存服务
为了快速入门,您可以使用单个驱动程序定义单个缓存服务
stash: drivers: [ FileSystem ] FileSystem: ~
此缓存服务将注册为 stash.default_cache
,也将自动别名到 cache
。
配置驱动程序
您可以直接在配置中设置缓存驱动程序的各个参数
stash: drivers: [ FileSystem ] FileSystem: dirSplit: 3 path: /tmp
多个驱动程序
如果您想按顺序使用多个驱动程序,可以分别列出它们
stash: drivers: [ Apc, FileSystem ] Apc: ~ FileSystem: path: /tmp
缓存服务将自动配置为复合驱动程序,按指定的顺序查询驱动程序(例如,在本示例中,首先查询 Apc,如果查询失败,然后查询 FileSystem。)
内存中
默认情况下,每个缓存服务都包括内存缓存:在单个请求的生命周期内,存储或从缓存服务检索的任何值都将存储在内存中,在检查其他驱动程序之前,将检查内存表示。
stash: drivers: [ Apc ] inMemory: false Apc: ~
Doctrine 适配器
Stash 提供了一个 Doctrine 缓存适配器,以便可以将 Stash 缓存服务注入到任何接受 DoctrineCacheInterface 对象的服务中。要打开服务适配器,设置参数
stash: drivers: [ Apc ] registerDoctrineAdapter: true Apc: ~
对于默认缓存,适配器服务将添加到容器中,名称为 stash.adapter.doctrine.default_cache
。您可以在任何需要常规 Doctrine Cache 对象的地方使用它
doctrine: orm: metadata_cache_driver: type: service id: stash.adapter.doctrine.default_cache query_cache_driver: type: service id: stash.adapter.doctrine.default_cache result_cache_driver: type: service id: stash.adapter.doctrine.default_cache
会话适配器
Stash 提供了一个会话适配器,允许将 Symfony 会话直接存储在缓存中。要打开适配器,设置参数
stash: drivers: [ Apc ] registerSessionHandler: true Apc: ~
一旦启用,在框架包中启用它,它将自动使用
framework: session: handler_id: stash.adapter.session.default_cache
日志记录器
Stash 支持遵循 PSR 的日志库,您可以通过传递日志服务名称作为参数来指定使用的库
stash: drivers: [ FileSystem ] logger: logger FileSystem: ~
多个服务
您还可以配置多个服务,每个服务都完全独立存储
stash: caches: first: drivers: [ FileSystem ] registerDoctrineAdapter: true FileSystem: ~ second: drivers: [ Apc, FileSystem ] inMemory: false logger: logger FileSystem: ~
每个服务都使用单独的、不同的内部命名空间中的键定义,因此您可以使用多个服务来避免在不同服务之间发生键冲突,即使您只有单个后端可用。
当定义了多个缓存时,您可以手动定义一个默认值,该值将被别名到stash
服务。
stash: default_cache: first first: ... second: ...
如果不进行定义,第一个定义的服务将被设置为默认。
跟踪
StashBundle包含一个模块,用于跟踪在请求期间执行的缓存查询的所有键,以进行调试目的。默认情况下,此模块在dev
和test
环境中启用,在其他地方禁用。但是,如果您想覆盖默认行为,可以在配置中启用或禁用此行为。
stash: tracking: true # enables query logging, false to disable tracking_values: true # enables query logging of full cache values, false to disable
Stash驱动配置
每个驱动程序都附带一组默认选项,可以单独覆盖。
FileSystem: dirSplit: 2 encoder: Native path: %kernel.cache_dir%/stash filePermissions: 0660 dirPermissions: 0770 memKeyLimit: 20 SQLite: path: %kernel.cache_dir%/stash filePermissions: 0660 dirPermissions: 0770 busyTimeout: 500 nesting: 0 subdriver: PDO Apc: ttl: 300 namespace: <none> Memcache: servers: - { server: 127.0.0.1, port: 11211, weight: 1 }