缓存

欧宝娱乐app下载地址Symfony支持缓存合同,PSR-6/16和Doctrine缓存接口。您可以在此处阅读更多关于这些信息组件文档欧宝体育电话

使用frameworkbundle配置缓存
这是一个您将与之交互的服务。每个池总是有自己的名称空间和缓存项。水池之间从来没有冲突。
适配器
适配器是一个模板您用于创建池。
提供者
提供商是某些适配器用于连接存储的服务。Redis和Memcached是这种适配器的示例。如果DSN用作提供者,则自动创建服务。

默认情况下,有两个池始终启用。他们是cache.app.Cache.System..系统缓存用于注释、序列化和验证等操作。的cache.app.可以在您的代码中使用。您可以使用使用它们使用的适配器(模板)配置应用程序系统关键:

  • yaml.
    1 2 3 4 5 5
    #配置/包/ cache.yaml框架缓存应用程序cache.adapter.filesystem.系统cache.adapter.System.System.
  • XML.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    <! -config/packages/cache.xml --><?XML Version =“1.0”编码=“UTF-8”?><容器XMLNS =.“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/xmlschema-instance”XMLNS:Framework =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”XSI:Schemalocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd.http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd“><框架:配置><框架:缓存app =.“cache.adapter.filesystem”系统=“cache.adapter.system”/>< /框架:配置>
  • PHP.
    1 2 3 4 5 6 7
    // config / packages / cache.php美元的容器- >loadfromextension.'框架''缓存'=>“应用程序”=>'cache.adapter.filesystem''系统'=>'cache.adapter.System'],]);

缓存组件配有预先配置的一系列适配器:

5.2版中的新增功能:cache.adapter.redis_tag_aware已在Symfony 5.2中引入。欧宝娱乐app下载地址

这些适配器中的一些可以通过快捷方式配置。使用这些快捷方式将创建具有遵循模式的服务ID的池缓存。[类型]

  • yaml.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    #配置/包/ cache.yaml框架缓存目录'%kernel.cache_dir%/ pools'#仅用于cache.adapter.filesystem#服务:cache.doctrinedefault_doctrine_provider.'app.doctrine_cache'#服务:cache.psr6default_psr6_provider.'app.my_psr6_service'#服务:cache.redisdefault_redis_provider.'redis:// localhost'#服务:cache.memcacheddefault_memcached_provider.'memcached:// localhost'#服务:cache.pdodefault_pdo_provider.'doctrine.dbal.default_connection'
  • XML.
    1 2 3 4 5 6 7 8 9 10 11 12 13 13 14 15 16 18 19 20 21 21 22 23 22 22 22 27 22 22 22
    <! -config/packages/cache.xml --><?XML Version =“1.0”编码=“UTF-8”?><容器XMLNS =.“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/xmlschema-instance”XMLNS:Framework =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”XSI:Schemalocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd.http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd“><框架:配置><! -default_doctrine_provider:服务:cache.doctrinedefault_psr6_provider:service:cache.psr6default_redis_provider:service:cache.redisdefault_memcached_provider:service:cache.memcacheddefault_pdo_provider:service:cache.pdo- ><! -"目录"attribute is only used with cache.adapter.filesystem --><框架:缓存目录=“%kernel.cache_dir%/ pools”default_doctrine_provider =.“app.doctrine_cache”default_psr6_provider =“app.my_psr6_service”default_redis_provider =.“redis:// localhost”default_memcached_provider =.“memcached:// localhost”default_pdo_provider =“doctrine.dbal.default_connection”/>< /框架:配置>
  • PHP.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18
    // config / packages / cache.php美元的容器- >loadfromextension.'框架''缓存'=>//只与cache.adapter.filesystem一起使用'目录'=>'%kernel.cache_dir%/ pools'//服务:cache.doctrine'default_doctrine_provider'=>'app.doctrine_cache'/ /服务:cache.psr6“default_psr6_provider”=>'app.my_psr6_service'//服务:cache.redis'default_redis_provider'=>'redis:// localhost'//服务:cache.memcached'default_memcached_provider'=>'memcached:// localhost'//服务:cache.pdo“default_pdo_provider”=>'doctrine.dbal.default_connection'],]);

创建自定义(命名空间)池
  • yaml.
    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.cache”服务#通过"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.#控制适配器的配置foob​​ar.cache.适配器cache.adapter.memcached.提供者memcached: / /用户:[电子邮件受保护]#使用“foobar.cache”池作为其后端但控件#生命周期和(如所有池)都有一个单独的缓存命名空间short_cache.适配器foob​​ar.cache.default_lifetime.60.
  • XML.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 21 22 23 23 22 32 29 29 30 31 32 32 34 35
    <! -config/packages/cache.xml --><?XML Version =“1.0”编码=“UTF-8”?><容器XMLNS =.“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/xmlschema-instance”XMLNS:Framework =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”XSI:Schemalocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd.http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd“><框架:配置><框架:缓存default-memcached-provider =“memcached:// localhost”><! -creates a "custom_thing.cache" service通过“CacheInterface $ CathnthingCache”可自动访问使用“app”缓存配置 - ><框架:池name =“custom_thing.cache”适配器=“cache.app”/><! -creates a "my_cache_pool" service自动连接通过“CacheInterface $myCachePool”——><框架:池name =“my_cache_pool”适配器=“cache.adapter.filesystem”/><! - 使用vaffic_memcached_provider从上面 - ><框架:池name =“acme.cache”适配器=“cache.adapter.memcached”/><! - 控制适配器的配置 - ><框架:池name =“foobar.cache”适配器=“cache.adapter.memcached”提供者=“memcached://用户:[电子邮件受保护]/><! - 使用“foobar.cache”池作为其后端但控件生存期和(像所有池一样)有一个单独的缓存名称空间——><框架:池name =“short_cache”适配器=“foobar.cache”default-lifetime =“60”/>> < /框架:缓存< /框架:配置>
  • PHP.
    12 34 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 32 33 34 35 36 37 38
    // config / packages / cache.php美元的容器- >loadfromextension.'框架''缓存'=>'default_memcached_provider'=>'memcached:// localhost''游泳池'=>//创建“custom_thing.cache”服务//通过“CacheInterface $ CathnthingCache”自动访问//使用“app”缓存配置“custom_thing.cache”=>'适配器'=>'cache.app'],//创建一个my_cache_pool服务//通过“CacheInterface $ mycachepool”自动访问'my_cache_pool'=>'适配器'=>'cache.adapter.filesystem'],//从上面使用default_memcached_provider'acme.cache'=>'适配器'=>'cache.adapter.memcached'],//控制适配器的配置'foobar.cache'=>'适配器'=>'cache.adapter.memcached''提供者'=>memcached: / /用户:[电子邮件受保护]],//使用foobar。缓存"pool as its backend but controls//生命周期和(如所有池)都有一个单独的缓存命名空间“short_cache”=>'适配器'=>'foobar.cache''default_lifetime'=>60.],],],]);

每个池都管理一组独立的缓存键:来自不同池的键从来没有碰撞,即使他们共享同一个后台。这是通过在键前面加上一个命名空间来实现的,这个命名空间是通过散列池的名称、已编译容器类的名称和可配置的种子默认为project目录。

每个自定义池都成为服务ID是池名称的服务(例如,custom_thing.cache)。还使用其名称的骆驼盒版本为每个池创建自动控制别名 - 例如,custom_thing.cache可以通过命名论证自动注入$ customthingcache.并用一个键入它欧宝娱乐app下载地址Symfony \ \缓存\ CacheInterface合同要么psr \ cache \ cacheitempoolinterface

采用欧宝娱乐app下载地址Symfony \ \缓存\ CacheInterface合同//从控制器方法民众功能listProductsCacheInterface.$ customthingcache./ /……//在服务中民众功能__constructCacheInterface.$ customthingcache./ /……

提示

如果您需要将命名空间与第三方应用程序互操作,则可以通过设置来控制自动生成命名空间属性的cache.pool服务标签。例如,您可以覆盖适配器的服务定义:

  • yaml.
    1 2 3 4 5 6
    #配置/服务.YAML服务app.cache.adapter.redis“cache.adapter.redis”标签-名称'cache.pool'命名空间“my_custom_namespace”
  • XML.
    1 2 3 4 5 6 7 8 9 10 11 12 13
    <! -  config / services.xml  - ><?XML Version =“1.0”编码=“UTF-8”?><容器XMLNS =.“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/xmlschema-instance”XSI:Schemalocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务ID =“app.cache.adapter.redis”父母=“cache.adapter.redis”>name =“cache.pool”命名空间=“my_custom_namespace”/>
  • PHP.
    1 2 3 4 5 6 7 8 9 10
    / /配置/ services.php命名空间欧宝娱乐app下载地址Symfony \ DependencyInjection \装载机\ \组件配置器返回功能containerconfigurator$ Configurator.$服务$ Configurator.- >服务();$服务- >'app.cace.adapter.redis'- >“cache.adapter.redis”- >标签'cache.pool'“名称”=>“my_custom_namespace”]);};

自定义提供程序选项rediSADAPTER.允许您使用选项创建提供程序超时retry_interval..使用这些选项使用这些选项,您需要创建自己的非默认值\ redis.提供程序并在配置池时使用它。

  • yaml.
    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.\ redis.工厂'欧宝娱乐app下载地址symfony \ component \ cache \适配器\ rediSadapter''createConnection'争论-'redis:// localhost'-retry_interval.2超时10.
  • XML.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 21 22 23 25 22 26 22
    <! -config/packages/cache.xml --><?XML Version =“1.0”编码=“UTF-8”?><容器XMLNS =.“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/xmlschema-instance”XMLNS:Framework =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”XSI:Schemalocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd.http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd“><框架:配置><框架:池name =“cache.my_redis”适配器=“cache.adapter.redis”提供者=“app.my_custom_redis_provider”/>> < /框架:缓存< /框架:配置><服务><服务ID =“app.my_custom_redis_provider”类=“\ redis”><工厂类=“欧宝娱乐app下载地址Symfony \ Component \ Cache \ Adapter \ RediSAdapter”方法=“createConnection”/><参数>复述:/ / localhost<争论类型=“收藏”><争论键=“retry_interval”>2<争论键=“超时”>10.
  • PHP.
    12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
    // config / packages / cache.php采用欧宝娱乐app下载地址Symfony \ Component \ Cache \ Adapter \ RedIsAdapter美元的容器- >loadfromextension.'框架''缓存'=>'游泳池'=>'cache.my_redis'=>'适配器'=>“cache.adapter.redis”'提供者'=>'app.my_custom_redis_provider'],],],]);美元的容器- >注册'app.my_custom_redis_provider'\ redis.::- >setFactory.([rediSADAPTER.::'createConnection'])- >addargument.'redis:// localhost'- >addargument.(['retry_interval'=>2'超时'=>10.])

创建缓存链
  • yaml.
    1 2 3 4 5 6 7 8 9 10
    #配置/包/ cache.yaml框架缓存游泳池my_cache_pooldefault_lifetime.31536000.# 一年适配器-cache.adapter.Array.-cache.adapter.apcu.-名称cache.adapter.redis提供者复述:/ /用户:[电子邮件受保护]
  • XML.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18
    <! -config/packages/cache.xml --><?XML Version =“1.0”编码=“UTF-8”?><容器XMLNS =.“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/xmlschema-instance”XMLNS:Framework =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”XSI:Schemalocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><框架:配置><框架:池name =“my_cache_pool”default-lifetime =“31536000”>name =“cache.adapter.array”/>name =“cache.adapter.apcu”/>name =“cache.adapter.redis”提供者=“redis://用户:[电子邮件受保护]/>> < /框架:池> < /框架:缓存< /框架:配置>
  • PHP.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    // config / packages / cache.php美元的容器- >loadfromextension.'框架''缓存'=>'游泳池'=>'my_cache_pool'=>'default_lifetime'=>31536000.// 一年'适配器'=>'cache.adapter.array''cache.adapter.apcu''名称'=>“cache.adapter.redis”'提供者'=>复述:/ /用户:[电子邮件受保护]],],],],],]);

缓存适配器需要实现欧宝娱乐app下载地址symfony \ contracts \ cache \ tagawareCacheInterface启用此功能。这可以通过使用以下配置添加。

  • yaml.
    1 2 3 4 5 6 7
    #配置/包/ cache.yaml框架缓存游泳池my_cache_pool适配器cache.adapter.redis标签真的
  • XML.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    <! -config/packages/cache.xml --><?XML Version =“1.0”编码=“UTF-8”?><容器XMLNS =.“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/xmlschema-instance”XMLNS:Framework =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”XSI:Schemalocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd.http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd“><框架:配置><框架:池name =“my_cache_pool”适配器=“cache.adapter.redis”标签=“真的”/>> < /框架:缓存< /框架:配置>
  • PHP.
    1 2 3 4 5 6 7 8 9 10 11
    // config / packages / cache.php美元的容器- >loadfromextension.'框架''缓存'=>'游泳池'=>'my_cache_pool'=>'适配器'=>“cache.adapter.redis”'标签'=>真的],],],]);

默认情况下,标签存储在同一池中。在大多数情况下都很好。但有时可以更好地将标签存储在不同的池中。可以通过指定适配器来实现。

  • yaml.
    1 2 3 4 5 6 7 8 9
    #配置/包/ cache.yaml框架缓存游泳池my_cache_pool适配器cache.adapter.redis标签tag_pool.tag_pool.适配器cache.adapter.apcu.
  • XML.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    <! -config/packages/cache.xml --><?XML Version =“1.0”编码=“UTF-8”?><容器XMLNS =.“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/xmlschema-instance”XMLNS:Framework =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”XSI:Schemalocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><框架:配置><框架:池name =“my_cache_pool”适配器=“cache.adapter.redis”标签=“tag_pool”/><框架:池name =“tag_pool”适配器=“cache.adapter.apcu”/>> < /框架:缓存< /框架:配置>
  • PHP.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14
    // config / packages / cache.php美元的容器- >loadfromextension.'框架''缓存'=>'游泳池'=>'my_cache_pool'=>'适配器'=>“cache.adapter.redis”'标签'=>'tag_pool'],'tag_pool'=>'适配器'=>'cache.adapter.apcu'],],],]);

请注意

的接口欧宝娱乐app下载地址symfony \ contracts \ cache \ tagawareCacheInterface是公开的cache.app.服务。

清除缓存垃圾箱/控制台缓存池:清楚[水池]命令。这将删除存储中的所有条目,并且您必须重新计算所有值。您还可以将池分组为“缓存清除器”。默认情况下有3个缓存清除器:

  • cache.global_clearer
  • Cache.System_Collecter.
  • cache.app_clearer

全局更清晰可清除每个池中的所有缓存项。系统缓存更清除器用于该系统垃圾箱/控制台缓存:清晰命令。应用程序更清晰的是默认更清晰。

要查看所有可用的缓存池:

1
php bin /控制台缓存池:列表

清除一个游泳池:

1
PHP BIN / CONSOLE缓存:POOP:清除My_cache_pool

清除所有自定义池:

1
PHP BIN / CONSOLE缓存:POOP:清除Cache.App_carter

清除各处的所有缓存:

1
PHP BIN / CONSOLE缓存:POOP:CLEAR CACH.GLOBAL_CORLER

加密缓存

5.1版中的新增功能:欧宝娱乐app下载地址Symfony \ Component \ Cache \ Marshaller \ SodiumMarshaller课程在Symfony 5.1中介绍。欧宝娱乐app下载地址

要使用缓存加密libsodium.,你可以使用欧宝娱乐app下载地址Symfony \ Component \ Cache \ Marshaller \ SodiumMarshaller

首先,您需要生成一个安全密钥并将其添加到您的秘密商店作为CACHE_DECRYPTION_KEY

1
php - r'echo base64_encode(sodium_crypto_box_keypair());'

然后,注册钠奶昔使用此密钥服务:

警告

这将加密缓存项的值,而不是缓存密钥。小心不要泄露密钥中的敏感数据。

配置多个键时,第一键将用于读写,并且附加密钥仅用于读取。一旦使用旧密钥加密的所有缓存项已过期,您可以删除old_cache_decryption_key.完全地。

这项工作包括代码样本,是在a下获得的许可Creative Commons by-SA 3.0许可证。