缓存
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.2,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
缓存
使用缓存是一个伟大的方式,使您的应用程序运行更快。Symfob娱乐下载ony缓存组件附带许多不同存储适配器。每个适配器都是开发高性能。
的基本使用缓存是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用ob娱乐下载\合同\缓存\ItemInterface;/ /调用缓存错过才会被执行。美元价值=美元池- >get (“my_cache_key”,函数(ItemInterface美元项){美元项- >expiresAfter (3600年);/ /……做一些HTTP请求或重计算吗美元computedValue=“foobar”;返回美元computedValue;});回声美元价值;/ /“foobar”/ /……并删除缓存键美元池- >删除(“my_cache_key”);
ob娱乐下载Symfony支持缓存合同,PSR-6/16和教义缓存接口。你可以阅读更多关于这些的组件的文档欧宝官网下载app。
4.2
缓存合同在Symfony 4.2中引入的。ob娱乐下载
配置缓存与FrameworkBundle
当配置缓存组件有几个概念的你应该知道:
- 池
- 这是一个服务,你会相互作用。每个池总有其自己的名称空间和缓存条目。没有池之间的冲突。
- 适配器
- 适配器是一种模板你使用它来创建池。
- 提供者
- 提供者是服务,一些适配器使用连接到存储。复述和Memcached的适配器。如果一个DSN作为供应商则自动创建一个服务。
有两个泳池,总是默认启用。他们是cache.app
和cache.system
。系统缓存用于注释,序列化器和验证。的cache.app
可以在代码中使用。您可以配置的适配器(模板)他们使用使用应用程序
和系统
关键:
- YAML
- XML
- PHP
1 2 3 4 5
#配置/包/ cache.yaml框架:缓存:应用:cache.adapter.filesystem系统:cache.adapter.system
缓存组件提供了一系列的适配器配置:
- cache.adapter.apcu
- cache.adapter.array
- cache.adapter.doctrine
- cache.adapter.filesystem
- cache.adapter.memcached
- cache.adapter.pdo
- cache.adapter.psr6
- cache.adapter.redis
这些适配器通过快捷键可以配置。使用这些快捷键将创建池的服务id(类型)缓存。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#配置/包/ cache.yaml框架:缓存:目录:“% kernel.cache_dir % /池”#只有cache.adapter.filesystem使用#服务:cache.doctrinedefault_doctrine_provider:“app.doctrine_cache”#服务:cache.psr6default_psr6_provider:“app.my_psr6_service”#服务:cache.redisdefault_redis_provider:复述:/ / localhost的#服务:cache.memcacheddefault_memcached_provider:memcached: / / localhost的#服务:cache.pdodefault_pdo_provider:“doctrine.dbal.default_connection”
创建自定义(名称空间)
您还可以创建更多的定制池:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31
#配置/包/ cache.yaml框架:缓存:default_memcached_provider:memcached: / / localhost的池:#创建一个“custom_thing。缓存”服务# autowireable通过“CacheInterface customThingCache美元”#使用“应用程序”的缓存配置custom_thing.cache:适配器:cache.app#创建一个“my_cache_pool”服务# autowireable通过“CacheInterface myCachePool美元”my_cache_pool:适配器:cache.adapter.array#使用default_memcached_provider从上面acme.cache:适配器:cache.adapter.memcached#控制适配器的配置foobar.cache:适配器:cache.adapter.memcached供应商:“memcached: / /用户:password@example.com”#使用“foobar。缓存”池作为后端,但控制#一生和(像所有池)有一个单独的缓存名称空间short_cache:适配器:foobar.cachedefault_lifetime:60
每个池管理一组独立的缓存键:钥匙不同的池从来没有碰撞,即使他们共享相同的后端。这是通过与一个名称空间前缀键生成的散列的名称,编译后的容器类和一个的名字可配置的种子默认为项目目录。
每个自定义池成为服务的服务id是池的名称(如。custom_thing.cache
)。还为每个池创建一个自动装配别名使用驼峰式大小写版本的名称——如。custom_thing.cache
可以自动注入命名的论点吗customThingCache美元
并类型提示CacheInterface或Psr \ \ CacheItemPoolInterface缓存
:
1 2 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\合同\缓存\CacheInterface;/ /从一个控制器的方法公共函数listProducts(CacheInterface美元customThingCache){/ /……}/ /服务公共函数__construct(CacheInterface美元customThingCache){/ /……}
自定义服务提供方程序选项
一些供应商特定的选项,这些选项可以配置。的RedisAdapter允许您创建提供者与选择超时
,retry_interval
。等。使用这些选项你需要创建自己的非默认值\复述,
提供者和使用,当配置池。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#配置/包/ cache.yaml框架:缓存:池:cache.my_redis:适配器:cache.adapter.redis供应商:app.my_custom_redis_provider服务:app.my_custom_redis_provider:类:\复述,工厂:\ ob娱乐下载[' Symfony \缓存组件\ \适配器RedisAdapter”,“createConnection”]参数:- - - - - -复述:/ / localhost的- - - - - -{retry_interval:2,超时:10}
创建一个缓存链
不同的缓存适配器有不同的优点和缺点。一些可能很快但小,可以包含大量的数据,但非常缓慢。得到最好的两个世界你可以用一连串的适配器。这个想法是首先看快速适配器,然后继续慢适配器。在最坏情况下需要重新计算的值。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#配置/包/ cache.yaml框架:缓存:池: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.array服务:app.my_cache_chain_adapter:类:ob娱乐下载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
。
使用缓存的标签
与许多应用程序缓存键可能是有用的组织能够存储的数据缓存失效更有效率。实现这一点的方法之一是使用缓存标签。一个或多个标签可以被添加到缓存项。所有项目具有相同键可以用一个函数调用无效:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用ob娱乐下载\合同\缓存\ItemInterface;美元value0=美元池- >get (“item_0”,函数(ItemInterface美元项){美元项- >标签([“foo”,“酒吧”])返回“调试”;});美元value1=美元池- >get (“item_1”,函数(ItemInterface美元项){美元项- >标记(“foo”)返回“调试”;});/ /清除所有缓存键标记“酒吧”美元池- >invalidateTags ([“酒吧”]);
缓存适配器需要实现TagAwareCacheInterface”来启用这个特性。这可以通过使用以下配置。
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/包/ cache.yaml框架:缓存:池:my_cache_pool:适配器:cache.adapter.redis标签:真正的
标签是默认存储在相同的池。这是一个在大多数场景。但有时它可能是更好的存储标签在不同的池。可以通过指定适配器。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9
#配置/包/ cache.yaml框架:缓存:池:my_cache_pool:适配器:cache.adapter.redis标签:tag_pooltag_pool:适配器:cache.adapter.apcu
清除缓存
您可以使用清除缓存bin /控制台缓存池:明确(池)
命令。这将删除所有的条目存储和你将不得不重新计算所有值。你也可以组织你的池“缓存清算所”。有三个默认缓存清算所:
cache.global_clearer
cache.system_clearer
cache.app_clearer
全球清晰清除所有缓存池。系统中使用缓存更清晰bin /控制台缓存:清楚
命令。应用程序更清晰是默认的清晰。
明确一个池:
1
美元php bin /控制台缓存池:my_cache_pool清晰
清除所有自定义池:
1
美元php bin /控制台缓存池:cache.app_clearer清晰
清除所有缓存无处不在:
1
美元php bin /控制台缓存池:cache.global_clearer清晰