@@ -354,7 +354,7 @@ case the value needs to be recalculated.
354
354
https://symfony.com/schema/dic/services/services-1.0.xsd" >
355
355
356
356
<framework : config >
357
- <framework : cache default_memcached_provider = " memcached://localhost " >
357
+ <framework : cache >
358
358
<framework : pool name =" my_cache_pool" adapter =" app.my_cache_chain_adapter" />
359
359
<framework : pool name =" cache.my_redis" adapter =" cache.adapter.redis" provider =" redis://user:password@example.com" />
360
360
</framework : cache >
@@ -403,6 +403,135 @@ case the value needs to be recalculated.
403
403
adapter in the ``app.my_cache_chain_adapter ``
404
404
405
405
406
+ Using Cache Tags
407
+ ----------------
408
+
409
+ In applications with many cache keys it could be useful to organize the data stored
410
+ to be able to invalidate the cache more efficient. One way to achieve that is to
411
+ use cache tags. One or more tags could be added to the cache item. All items with
412
+ the same key could be invalidate with one function call::
413
+
414
+ use Symfony\Contracts\Cache\ItemInterface;
415
+
416
+ $value0 = $pool->get('item_0', function (ItemInterface $item) {
417
+ $item->tag(['foo', 'bar'])
418
+
419
+ return 'debug';
420
+ });
421
+
422
+ $value1 = $pool->get('item_1', function (ItemInterface $item) {
423
+ $item->tag('foo')
424
+
425
+ return 'debug';
426
+ });
427
+
428
+ // Remove all cache keys tagged with "bar"
429
+ $pool->invalidateTags(['bar']);
430
+
431
+ The cache adapter needs to implement :class: `Symfony\\ Contracts\\ Cache\\ TagAwareCacheInterface` `
432
+ to enable this feature. This could be added by using the following configuration.
433
+
434
+ .. configuration-block ::
435
+
436
+ .. code-block :: yaml
437
+
438
+ # config/packages/cache.yaml
439
+ framework :
440
+ cache :
441
+ pools :
442
+ my_cache_pool :
443
+ adapter : cache.adapter.redis
444
+ tags : true
445
+
446
+ .. code-block :: xml
447
+
448
+ <!-- config/packages/cache.xml -->
449
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
450
+ <container xmlns =" http://symfony.com/schema/dic/services"
451
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
452
+ xmlns : framework =" http://symfony.com/schema/dic/symfony"
453
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
454
+ https://symfony.com/schema/dic/services/services-1.0.xsd" >
455
+
456
+ <framework : config >
457
+ <framework : cache >
458
+ <framework : pool name =" my_cache_pool" adapter =" cache.adapter.redis" tags =" true" />
459
+ </framework : cache >
460
+ </framework : config >
461
+ </container >
462
+
463
+ .. code-block :: php
464
+
465
+ // config/packages/cache.php
466
+ $container->loadFromExtension('framework', [
467
+ 'cache' => [
468
+ 'pools' => [
469
+ 'my_cache_pool' => [
470
+ 'adapter' => 'cache.adapter.redis',
471
+ 'tags' => true,
472
+ ],
473
+ ],
474
+ ],
475
+ ]);
476
+
477
+ Tags are stored in the same pool by default. This is good in most scenarios. But
478
+ sometimes it might be better to store the tags in a different pool. That could be
479
+ achieved by specifying the adapter.
480
+
481
+ .. configuration-block ::
482
+
483
+ .. code-block :: yaml
484
+
485
+ # config/packages/cache.yaml
486
+ framework :
487
+ cache :
488
+ pools :
489
+ my_cache_pool :
490
+ adapter : cache.adapter.redis
491
+ tags : tag_pool
492
+ tag_pool :
493
+ adapter : cache.adapter.apcu
494
+
495
+ .. code-block :: xml
496
+
497
+ <!-- config/packages/cache.xml -->
498
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
499
+ <container xmlns =" http://symfony.com/schema/dic/services"
500
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
501
+ xmlns : framework =" http://symfony.com/schema/dic/symfony"
502
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
503
+ https://symfony.com/schema/dic/services/services-1.0.xsd" >
504
+
505
+ <framework : config >
506
+ <framework : cache >
507
+ <framework : pool name =" my_cache_pool" adapter =" cache.adapter.redis" tags =" tag_pool" />
508
+ <framework : pool name =" tag_pool" adapter =" cache.adapter.apcu" />
509
+ </framework : cache >
510
+ </framework : config >
511
+ </container >
512
+
513
+ .. code-block :: php
514
+
515
+ // config/packages/cache.php
516
+ $container->loadFromExtension('framework', [
517
+ 'cache' => [
518
+ 'pools' => [
519
+ 'my_cache_pool' => [
520
+ 'adapter' => 'cache.adapter.redis',
521
+ 'tags' => 'tag_pool',
522
+ ],
523
+ 'tag_pool' => [
524
+ 'adapter' => 'cache.adapter.apcu',
525
+ ],
526
+ ],
527
+ ],
528
+ ]);
529
+
530
+ .. note ::
531
+
532
+ The interface :class: `Symfony\\ Contracts\\ Cache\\ TagAwareCacheInterface` ` is
533
+ autowired to the ``cache.app `` service.
534
+
406
535
Clearing the Cache
407
536
------------------
408
537
0 commit comments