@@ -175,10 +175,10 @@ will create pool with service id of ``cache.[type]``
175
175
],
176
176
]);
177
177
178
- Creating Custom Pools
179
- ---------------------
178
+ Creating Custom (Namespaced) Pools
179
+ ----------------------------------
180
180
181
- You can also create more customized pools. All you need is an adapter :
181
+ You can also create more customized pools:
182
182
183
183
.. configuration-block ::
184
184
@@ -188,15 +188,34 @@ You can also create more customized pools. All you need is an adapter:
188
188
framework :
189
189
cache :
190
190
default_memcached_provider : ' memcached://localhost'
191
+
191
192
pools :
193
+ # creates a "custom_thing.cache" service
194
+ # autowireable via "CacheInterface $customThingCache"
195
+ # uses the "app" cache configuration
196
+ custom_thing.cache :
197
+ adapter : cache.app
198
+
199
+ # creates a "my_cache_pool" service
200
+ # autowireable via "CacheInterface $myCachePool"
192
201
my_cache_pool :
193
202
adapter : cache.adapter.array
194
- cache.acme :
203
+
204
+ # uses the default_memcached_provider from above
205
+ acme.cache :
195
206
adapter : cache.adapter.memcached
196
- cache.foobar :
207
+
208
+ # control adapter's configuration
209
+ foobar.cache :
197
210
adapter : cache.adapter.memcached
198
211
provider : ' memcached://user:[email protected] '
199
212
213
+ # uses the "foobar.cache" pool as its backend but controls
214
+ # the lifetime and (like all pools) has a separate cache namespace
215
+ short_cache :
216
+ adapter : cache.foobar
217
+ default_lifetime : 60
218
+
200
219
.. code-block :: xml
201
220
202
221
<!-- config/packages/cache.xml -->
@@ -209,9 +228,11 @@ You can also create more customized pools. All you need is an adapter:
209
228
210
229
<framework : config >
211
230
<framework : cache default_memcached_provider =" memcached://localhost" >
231
+ <framework : pool name =" custom_thing.cache" adapter =" cache.app" />
212
232
<framework : pool name =" my_cache_pool" adapter =" cache.adapter.array" />
213
- <framework : pool name =" cache.acme" adapter =" cache.adapter.memcached" />
214
- <framework : pool name =" cache.foobar" adapter =" cache.adapter.memcached" provider =" memcached://user:[email protected] " />
233
+ <framework : pool name =" acme.cache" adapter =" cache.adapter.memcached" />
234
+ <framework : pool name =" foobar.cache" adapter =" cache.adapter.memcached" provider =" memcached://user:[email protected] " />
235
+ <framework : pool name =" short_cache" adapter =" foobar.cache" default_lifetime =" 60" />
215
236
</framework : cache >
216
237
</framework : config >
217
238
</container >
@@ -223,107 +244,54 @@ You can also create more customized pools. All you need is an adapter:
223
244
'cache' => [
224
245
'default_memcached_provider' => 'memcached://localhost',
225
246
'pools' => [
247
+ 'custom_thing.cache' => [
248
+ 'adapter' => 'cache.app',
249
+ ],
226
250
'my_cache_pool' => [
227
251
'adapter' => 'cache.adapter.array',
228
252
],
229
- 'cache. acme' => [
253
+ 'acme.cache ' => [
230
254
'adapter' => 'cache.adapter.memcached',
231
255
],
232
- 'cache.foobar' => [
233
- 'adapter' => 'cache.adapter.memcached',
234
- 'provider' => 'memcached://user:[email protected] ',
235
- ],
236
- ],
237
- ],
238
- ]);
239
-
240
-
241
- The configuration above will create 3 services: ``my_cache_pool ``, ``cache.acme ``
242
- and ``cache.foobar ``. The ``my_cache_pool `` pool is using the ArrayAdapter
243
- and the other two are using the :doc: `MemcachedAdapter </components/cache/adapters/memcached_adapter >`.
244
- The ``cache.acme `` pool is using the Memcached server on localhost and ``cache.foobar ``
245
- is using the Memcached server at example.com.
246
-
247
- Each pool will manage a set of independent cache keys: keys of different pools
248
- never collide even if they share the same backend. This is achieved by prefixing
249
- keys with a namespace. This namespace is generated by hashing the name of the
250
- pool, the name of the compiled container class and a configurable seed that XXX HOWTO LINK TO reference/configuration/framework.rst#prefix_seed? XXX
251
- defaults to the project directory.
252
-
253
- For advanced configurations it could sometimes be useful to use a pool as an adapter.
254
-
255
- .. configuration-block ::
256
-
257
- .. code-block :: yaml
258
-
259
- # config/packages/cache.yaml
260
- framework :
261
- cache :
262
- app : my_configured_app_cache
263
- pools :
264
- my_cache_pool :
265
- adapter : cache.adapter.memcached
266
- provider : ' memcached://user:[email protected] '
267
- cache.short_cache :
268
- adapter : my_cache_pool
269
- default_lifetime : 60
270
- cache.long_cache :
271
- adapter : my_cache_pool
272
- default_lifetime : 604800
273
- my_configured_app_cache :
274
- # "cache.adapter.filesystem" is the default for "cache.app"
275
- adapter : cache.adapter.filesystem
276
- default_lifetime : 3600
277
-
278
- .. code-block :: xml
279
-
280
- <!-- config/packages/cache.xml -->
281
- <?xml version =" 1.0" encoding =" UTF-8" ?>
282
- <container xmlns =" http://symfony.com/schema/dic/services"
283
- xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
284
- xmlns : framework =" http://symfony.com/schema/dic/symfony"
285
- xsi : schemaLocation =" http://symfony.com/schema/dic/services
286
- https://symfony.com/schema/dic/services/services-1.0.xsd" >
287
-
288
- <framework : config >
289
- <framework : cache app =" my_cache_pool" >
290
- <framework : pool name =" my_cache_pool" adapter =" cache.adapter.memcached" provider =" memcached://user:[email protected] " />
291
- <framework : pool name =" cache.short_cache" adapter =" my_cache_pool" default_lifetime =" 604800" />
292
- <framework : pool name =" cache.long_cache" adapter =" my_cache_pool" default_lifetime =" 604800" />
293
- <!-- "cache.adapter.filesystem" is the default for "cache.app" -->
294
- <framework : pool name =" my_configured_app_cache" adapter =" cache.adapter.filesystem" default_lifetime =" 3600" />
295
- </framework : cache >
296
- </framework : config >
297
- </container >
298
-
299
- .. code-block :: php
300
-
301
- // config/packages/cache.php
302
- $container->loadFromExtension('framework', [
303
- 'cache' => [
304
- 'app' => 'my_configured_app_cache',
305
- 'pools' => [
306
- 'my_cache_pool' => [
256
+ 'foobar.cache' => [
307
257
'adapter' => 'cache.adapter.memcached',
308
258
'provider' => 'memcached://user:[email protected] ',
309
259
],
310
- 'cache. short_cache' => [
311
- 'adapter' => 'cache.adapter.memcached ',
260
+ 'short_cache' => [
261
+ 'adapter' => 'foobar.cache ',
312
262
'default_lifetime' => 60,
313
263
],
314
- 'cache.long_cache' => [
315
- 'adapter' => 'cache.adapter.memcached',
316
- 'default_lifetime' => 604800,
317
- ],
318
- 'my_configured_app_cache' => [
319
- // "cache.adapter.filesystem" is the default for "cache.app"
320
- 'adapter' => 'cache.adapter.filesystem',
321
- 'default_lifetime' => 3600,
322
- ],
323
264
],
324
265
],
325
266
]);
326
267
268
+ Each pool manages a set of independent cache keys: keys of different pools
269
+ *never * collide, even if they share the same backend. This is achieved by prefixing
270
+ keys with a namespace that's generated by hashing the name of the pool, the name
271
+ of the compiled container class and a :ref: `configurable seed<reference-cache-prefix-seed> `
272
+ that defaults to the project directory.
273
+
274
+ Each custom pool becomes a service where the service id is the name of the pool
275
+ (e.g. ``custom_thing.cache ``). An autowiring alias is also created for each pool
276
+ using the camel case version of its name - e.g. ``custom_thing.cache `` can be
277
+ injected automatically by naming the argument ``$forecastCache `` and type-hinting it
278
+ with either :class: `Symfony\\ Contracts\\ Cache\\ CacheInterface ` or
279
+ ``Psr\\Cache\\CacheItemPoolInterface ``::
280
+
281
+ use Symfony\Contracts\Cache\CacheInterface;
282
+
283
+ // from a controller method
284
+ public function listProducts(CacheInterface $customThingCache)
285
+ {
286
+ // ...
287
+ }
288
+
289
+ // in a service
290
+ public function __construct(CacheInterface $customThingCache)
291
+ {
292
+ // ...
293
+ }
294
+
327
295
Custom Provider Options
328
296
-----------------------
329
297
@@ -401,19 +369,6 @@ and use that when configuring the pool.
401
369
'timeout' => 10
402
370
]);
403
371
404
- Injecting a custom pool into your services
405
- ------------------------------------------
406
-
407
- Each custom pool is turned into a corresponding service with the exact same id as the
408
- name of the pool that you can reference in your service configuration files.
409
-
410
- If you prefer using autowiring, a named autowiring alias is created for each pool
411
- using the camel case version of its name. This means that if you name a pool e.g.
412
- ``forecast.cache ``, you can have it injected automatically by naming the
413
- corresponding argument ``$forecastCache `` with its type-hint set to either
414
- ``Symfony\\Contracts\\Cache\\CacheInterface `` or ``Psr\\Cache\\CacheItemPoolInterface ``
415
- depending on the interfaces you want to use.
416
-
417
372
Creating a Cache Chain
418
373
----------------------
419
374
0 commit comments