缓存

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

缓存

使用缓存是提高应用程序运行速度的好方法。Symfob娱乐下载ony缓存组件附带许多到不同存储的适配器。每个适配器都是为高性能而开发的。

缓存的典型使用示例如下:

12 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支持Cache contract, PSR-6/16和Doctrine Cache接口。你可以在组件的文档欧宝官网下载app

使用FrameworkBundle配置缓存

在配置缓存组件时,有几个概念你应该知道:

这是一个您将与之交互的服务。每个池总是有自己的名称空间和缓存项。池之间永远不会有冲突。
适配器
适配器是模板用于创建池。
提供者
提供者是一些适配器用来连接到存储的服务。Redis和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组件带有一系列预配置的适配器:

其中一些适配器可以通过快捷方式进行配置。使用这些快捷方式将创建具有遵循该模式的服务id的池(类型)缓存。

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15
#配置/包/ cache.yaml框架:缓存:目录:“% 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 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。缓存”服务#通过CacheInterface $customThingCache自动连接#使用“app”缓存配置custom_thing.cache:适配器:cache.app#创建my_cache_pool服务#通过“CacheInterface $myCachePool”自动连接my_cache_pool:适配器:cache.adapter.filesystem#使用上面的default_memcached_provideracme.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美元然后用任何一种方式输入提示CacheInterfacePsr \ \ CacheItemPoolInterface缓存

12 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载合同缓存CacheInterface//从控制器方法公共函数listProducts(CacheInterfacecustomThingCache/ /……//在服务中公共函数__construct(CacheInterfacecustomThingCache/ /……

自定义提供者选项

一些提供者具有可以配置的特定选项。的RedisAdapter允许您创建带有选项的提供程序超时retry_interval.等。要使用非默认值的这些选项,您需要创建自己的选项\复述,提供者,并在配置池时使用它。

  • YAML
  • XML
  • PHP
12 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

创建缓存链

不同的缓存适配器有不同的优点和缺点。有些可能非常快,但优化存储小项目,有些可能能够包含大量数据,但相当慢。为了两全其美,您可以使用适配器链。

缓存链将多个缓存池合并为一个缓存池。当在缓存链中存储一个项时,Symfony将它按顺序存储在所有池中。ob娱乐下载当检索一个项目时,Symfony尝试从第一个池中获ob娱乐下载取它。如果没有找到,则尝试下一个池,直到找到该项或抛出异常。由于这种行为,建议按照从最快到最慢的顺序定义链中的适配器。

如果在池中存储项时发生错误,Symfony将其存储在其他池中,并且不会抛出异常。ob娱乐下载稍后,当条目被检索时,Symfony会自动将条目存储在所有缺失的池中。ob娱乐下载

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10
#配置/包/ cache.yaml框架:缓存:池:my_cache_pool:default_lifetime:31536000#一年适配器:-cache.adapter.array-cache.adapter.apcu-{名称:cache.adapter.redis,供应商:“复述:/ /用户:password@example.com”

使用缓存标签

在具有许多缓存键的应用程序中,组织存储的数据以更有效地使缓存失效可能是有用的。实现这一点的一种方法是使用缓存标记。可以向缓存项添加一个或多个标记。所有具有相同键的项都可以通过一个函数调用而失效:

12 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
使用ob娱乐下载合同缓存ItemInterface使用ob娱乐下载合同缓存TagAwareCacheInterfaceSomeClass私人myCachePool//使用autowiring注入缓存池公共函数__construct(TagAwareCacheInterfacemyCachePool->myCachePool =myCachePool;}公共函数someMethod()value0->myCachePool->get (“item_0”函数(ItemInterface->标签([“foo”“酒吧”]);返回“调试”;});value1->myCachePool->get (“item_1”函数(ItemInterface->标记(“foo”);返回“调试”;});//删除所有带"bar"的缓存键->myCachePool->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

请注意

的接口TagAwareCacheInterface自动连接到cache.app服务。

清空缓存

要清除缓存,可以使用Bin /console cache:pool:clear [pool]命令。这将从存储中删除所有条目,您将不得不重新计算所有值。你也可以把你的缓存池归为“缓存清理器”。默认情况下有3个缓存清理器:

  • cache.global_clearer
  • cache.system_clearer
  • cache.app_clearer

全局清除器清除每个池中的所有缓存项。系统缓存清除器用于bin /控制台缓存:清楚命令。app clear是默认的clear。

查询所有可用的缓存池。

1
PHP bin/控制台缓存:pool:list

清理一个池:

1
PHP bin/控制台缓存池:清除my_cache_pool

清除所有自定义池:

1
PHP bin/控制台缓存:清除cache.app_clear

清除所有缓存:

1
PHP bin/控制台缓存:清除cache.global_clear
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。