缓存
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.4,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
缓存
使用缓存是提高应用程序运行速度的好方法。Symf欧宝娱乐app下载地址ony缓存组件与许多适配器一起提供到不同的存储。每个适配器都是为高性能而开发的。
缓存的典型使用示例如下:
1 2 3 4 5 6 7 8 9
如果(!$缓存->有(“my_cache_key”)) {/ /……做一些HTTP请求或繁重的计算$缓存->集(“my_cache_key”,“foobar”,3600);}回声$缓存->get (“my_cache_key”);/ /“foobar”/ /……并删除缓存键$缓存->删除(“my_cache_key”);
欧宝娱乐app下载地址Symfony支持PSR-6和PSR-16缓存接口。你可以在组件的文档欧宝体育电话.
使用FrameworkBundle配置缓存
在配置缓存组件时,有几个概念你应该知道:
- 池
- 这是一个您将与之交互的服务。每个池总是有自己的名称空间和缓存项。池之间永远不会有冲突。
- 适配器
- 适配器是模板用于创建池。
- 提供者
- 提供者是一些适配器用来连接到存储的服务。Redis和Memcached就是这样的适配器的例子。如果使用DSN作为提供者,则自动创建服务。
默认情况下总是启用两个池。他们是cache.app
而且cache.system
.系统缓存用于注释、序列化器和验证。的cache.app
可以在您的代码中使用。属性来配置它们使用的适配器(模板)应用程序
而且系统
关键:
- YAML
- XML
- PHP
1 2 3 4 5
# app / config / config.yml框架:缓存:应用:cache.adapter.filesystem系统:cache.adapter.system
Cache组件附带了一系列已经创建的适配器:
- cache.adapter.apcu
- cache.adapter.doctrine
- cache.adapter.filesystem
- cache.adapter.memcached
- cache.adapter.pdo
- cache.adapter.redis
- PHPFileAdapter
- PHPArrayAdapter
- ChainAdapter
- ProxyAdapter
cache.adapter.psr6
cache.adapter.system
NullAdapter
其中一些适配器可以通过快捷方式进行配置。使用这些快捷方式将创建服务id为的池(类型)缓存。
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15
# app / config / config.yml框架:缓存:目录:“% kernel.cache_dir % /池”#仅用于cache.adapter.filesystem# service: cache.doctrinedefault_doctrine_provider:“app.doctrine_cache”# service: cache.psr6default_psr6_provider:“app.my_psr6_service”# service: cache.redisdefault_redis_provider:复述:/ / localhost的# service: cache.memcacheddefault_memcached_provider:memcached: / / localhost的# service: cache.pdodefault_pdo_provider:“doctrine.dbal.default_connection”
创建自定义池
您还可以创建更多的自定义池。你只需要一个适配器:
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12
# app / config / config.yml框架:缓存:default_memcached_provider:memcached: / / localhost的池:my_cache_pool:供应商:cache.adapter.filesystemcache.acme:适配器:cache.adapter.memcachedcache.foobar:适配器:cache.adapter.memcached供应商:“memcached: / /用户:password@example.com”
上面的配置将创建3个服务:my_cache_pool
,cache.acme
而且cache.foobar
.的my_cache_pool
池正在使用文件系统适配器,其他两个正在使用MemcachedAdapter.的cache.acme
池正在使用本地主机上的Memcached服务器cache.foobar
在example.com上使用Memcached服务器。
对于高级配置,有时使用池作为适配器是有用的。
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# app / config / config.yml框架:缓存:应用:my_configured_app_cache池:my_cache_pool:适配器:cache.adapter.memcached供应商:“memcached: / /用户:password@example.com”cache.short_cache:适配器:my_cache_pooldefault_lifetime:60cache.long_cache:适配器:my_cache_pooldefault_lifetime:604800my_configured_app_cache:#“cache.adapter。Filesystem "是"cache.app"的默认值适配器:cache.adapter.filesystemdefault_lifetime:3600
自定义提供者选项
一些提供者具有可以配置的特定选项。的RedisAdapter允许您创建带有选项的提供程序超时
,retry_interval
.等。要使用非默认值的这些选项,您需要创建自己的选项\复述,
提供者,并在配置池时使用它。
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15
# app / config / config.yml框架:缓存:池:cache.my_redis:适配器:cache.adapter.redis供应商:app.my_custom_redis_provider服务:app.my_custom_redis_provider:类:\复述,工厂:\ 欧宝娱乐app下载地址[' Symfony \缓存组件\ \适配器RedisAdapter”,“createConnection”]参数:-复述:/ / localhost的-{retry_interval:2,超时:10}
创建缓存链
不同的缓存适配器有不同的优点和缺点。有些可能非常快,但优化存储小项目,有些可能能够包含大量数据,但相当慢。为了两全其美,您可以使用适配器链。
缓存链将多个缓存池合并为一个缓存池。当在缓存链中存储一个项时,Symfony将它按顺序存储在所有池中。欧宝娱乐app下载地址当检索一个项目时,Symfony尝试从第一个池中获欧宝娱乐app下载地址取它。如果没有找到,则尝试下一个池,直到找到该项或抛出异常。由于这种行为,建议按照从最快到最慢的顺序定义链中的适配器。
如果在池中存储项时发生错误,Symfony将其存储在其他池中,并且不会抛出异常。欧宝娱乐app下载地址稍后,当条目被检索时,Symfony会自动将条目存储在所有缺失的池中。欧宝娱乐app下载地址
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
# app / config / config.yml框架:缓存:池:my_cache_pool:适配器:cache.adapter.psr6供应商:app.my_cache_chain_adaptercache.my_redis:适配器:cache.adapter.redis供应商:“复述:/ /用户:password@example.com”cache.apcu:适配器:cache.adapter.apcucache.array:适配器:cache.adapter.filesystem服务:app.my_cache_chain_adapter:类:欧宝娱乐app下载地址Symfony \适配器组件缓存\ \ \ ChainAdapter参数:-(“@cache.array”,“@cache.apcu”,“@cache.my_redis”]-31536000#一年
请注意
在这个配置中my_cache_pool
池正在使用cache.adapter.psr6
适配器和app.my_cache_chain_adapter
服务作为提供者。那是因为ChainAdapter
不支持cache.pool
标签。所以它被装饰着ProxyAdapter
.
清空缓存
要清除缓存,可以使用Bin /console cache:pool:clear [pool]
命令。这将从您的存储中删除所有条目,您将不得不重新计算所有值。你也可以把你的缓存池归为“缓存清理器”。默认情况下有3个缓存清理器:
cache.global_clearer
cache.system_clearer
cache.app_clearer
全局清除器清除每个池中的所有缓存。系统缓存清除器用于bin /控制台缓存:清楚
命令。app clear是默认的clear。
清理一个池:
1
$PHP bin/控制台缓存池:清除my_cache_pool
清除所有自定义池:
1
$PHP bin/控制台缓存:清除cache.app_clear
清除所有缓存:
1
$PHP bin/控制台缓存:清除cache.global_clear