Implement CRM_Utils_Cache_Tiered
authorTim Otten <totten@civicrm.org>
Mon, 21 Jan 2019 09:59:48 +0000 (01:59 -0800)
committerTim Otten <totten@civicrm.org>
Wed, 30 Jan 2019 00:47:08 +0000 (16:47 -0800)
commit3768d7a07ff87848f87dc2aed605a71ec8143e27
treee741d193f4ae2700dcf39091fa789e9270c2b524
parentb510643f52e33269527bfa53fded498360fdaafc
Implement CRM_Utils_Cache_Tiered

Before
------
* No way to daisy-chain caches to form a cache hierarchy
* ArrayCache::reobjectify() would fail to reobjectify objects in an array, which seems against the spirit of PSR-16

After
-----
* You can create a cache hierarchy with `new CRM_Utils_Cache_Tiered([$fastCache, $mediumCache, $slowCache])`
* ArrayCache::reobjectify() will reobjectify if it detects an object directly in an array

Note: To ensure that TTL data is respected consistently regardless of how
the tiers behave and the order in which they are used, the TTL/expiration
must be stored extra times.
CRM/Utils/Cache/ArrayCache.php
CRM/Utils/Cache/Tiered.php [new file with mode: 0644]
tests/phpunit/E2E/Cache/TieredTest.php [new file with mode: 0644]