This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Nicolas Grekas b22a58449c feature #35362 [Cache] Add LRU + max-lifetime capabilities to ArrayCache (nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Cache] Add LRU + max-lifetime capabilities to ArrayCache

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix https://github.com/orgs/symfony/projects/1#card-30686676
| License       | MIT
| Doc PR        | -

In https://github.com/symfony/symfony/pull/32294#issuecomment-508067745, @andrerom writes:

> if you plan to expose use of ArrayAdapter to a wider audience you should probably also add the following features to it:
> - max item limit to avoid reaching memory limits
> - own (very low, like default 100-500ms) TTL for in-memory caching, as it's in practice stale data when used in concurrent scenarios
>
> If you want to be advance you can also:
>
> - keep track of use, and evict cache items based on that using LFU when reaching limit
> - in-memory cache is domain & project specific in terms of how long it's somewhat "safe" to keep items in memory, so either describe when to use and not use on a per pool term, or allow use of pool to pass in flags to opt out of in-memory cache for cases developer knows it should be ignored

This PR implements these suggestions, via two new constructor arguments: `$maxLifetime` and `$maxItems`.

In Yaml:
```yaml
services:
    app.lru150_cache:
        parent: cache.adapter.array
        arguments:
            $maxItems: 150
            $maxLifetime: 0.150

framework:
    cache:
        pools:
            my_chained_pool:
                adapters:
                  - app.lru150_cache
                  - cache.adapter.filesystem
```

This configuration adds a local memory cache that keeps max 150 elements for 150ms on top of a filesystem cache.

/cc @lyrixx since you were also interested in it.

Commits
-------

48a5d5e8a9 [Cache] Add LRU + max-lifetime capabilities to ArrayCache
2020-01-27 11:48:06 +01:00
.github Merge branch '4.4' into 5.0 2019-12-10 14:44:54 +01:00
src/Symfony feature #35362 [Cache] Add LRU + max-lifetime capabilities to ArrayCache (nicolas-grekas) 2020-01-27 11:48:06 +01:00
.appveyor.yml Merge branch '4.4' into 5.0 2019-12-16 14:35:13 +01:00
.editorconfig Update .editorconfig 2018-09-06 16:22:56 +02:00
.gitignore Run the phpunit-bridge from a PR 2019-08-02 17:46:19 +02:00
.php_cs.dist Merge branch '4.4' 2019-11-05 18:15:52 +01:00
.travis.yml Merge branch '4.4' into 5.0 2020-01-23 12:07:12 +01:00
CHANGELOG-4.0.md Merge branch '3.4' into 4.1 2018-08-01 18:22:14 +02:00
CHANGELOG-4.1.md updated CHANGELOG for 4.1.10 2019-01-06 17:16:07 +01:00
CHANGELOG-4.2.md updated CHANGELOG for 4.2.10 2019-06-26 16:19:37 +02:00
CHANGELOG-4.3.md updated CHANGELOG for 4.3.10 2020-01-21 14:13:32 +01:00
CHANGELOG-4.4.md updated CHANGELOG for 4.4.3 2020-01-21 14:23:10 +01:00
CHANGELOG-5.0.md Merge branch '5.0' 2020-01-23 12:07:40 +01:00
CODE_OF_CONDUCT.md Added the Code of Conduct file 2018-10-10 03:13:30 -07:00
composer.json Merge branch '5.0' 2020-01-04 15:20:45 +01:00
CONTRIBUTING.md Mention the community review guide 2016-12-18 22:02:35 +01:00
CONTRIBUTORS.md update CONTRIBUTORS for 3.4.37 2020-01-21 13:29:48 +01:00
LICENSE Update year in license files 2020-01-01 12:03:25 +01:00
link Merge branch '3.4' into 4.3 2019-12-06 14:11:20 +01:00
phpunit Ignore deprecations about doctrine/persistence coming from doctrine/orm 2019-12-16 13:38:17 +01:00
phpunit.xml.dist [Cache] Add optimized FileSystem & Redis TagAware Adapters 2019-04-24 07:47:35 +02:00
README.md Improve Symfony description 2019-11-24 19:17:45 +01:00
UPGRADE-4.0.md Merge branch '3.4' into 4.3 2019-11-16 10:07:40 +01:00
UPGRADE-4.1.md Merge branch '4.0' into 4.1 2018-05-31 12:17:53 +02:00
UPGRADE-4.2.md Merge branch '3.4' into 4.3 2020-01-08 18:19:22 +01:00
UPGRADE-4.3.md Merge branch '4.3' into 4.4 2019-11-19 13:20:06 +01:00
UPGRADE-4.4.md add note about HTTP status code change 2019-12-23 10:53:34 -05:00
UPGRADE-5.0.md minor #35297 Improve upgrading instructions for deprecated router options (flack) 2020-01-11 08:31:01 +01:00
UPGRADE-5.1.md [Console] Add default parameter (true) for Command::setHidden() 2020-01-22 11:03:14 +01:00
UPGRADE-6.0.md [Console] Add default parameter (true) for Command::setHidden() 2020-01-22 11:03:14 +01:00

Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Symfony is used by thousands of web applications (including BlaBlaCar.com and Spotify.com) and most of the popular PHP projects (including Drupal and Magento).

Installation

Documentation

Community

Contributing

Symfony is an Open Source, community-driven project with thousands of contributors. Join them contributing code or contributing documentation.

Security Issues

If you discover a security vulnerability within Symfony, please follow our disclosure procedure.

About Us

Symfony development is sponsored by SensioLabs, led by the Symfony Core Team and supported by Symfony contributors.