Delayed Cache is a wrapper for Zend Cache. Sometimes you have parallel requests want a cached result that was already started, but is still under construction. Delayed cache will wait until it is ready and then it will return the result for you.
Code information:
Package information:
Append the lib to your requirements key in your composer.json.
{
// composer.json
// [..]
require: {
// append this line to your requirements
"koine/delayed-cache": "dev-master"
}
}
- Learn composer. You should not be looking for an alternative install. It is worth the time. Trust me ;-)
- Follow this set of instructions
$zendCache = $cache = \Zend\Cache\StorageFactory::adapterFactory(
'apc',
array('ttl' => 3600)
);
$delayedCache = new \Koine\DelayedCache\DelayedCache($zendCache);
// index.php, second 10:00:00 am
$cacheKey = 'veryExpansiveCalculation';
$veryExpansiveCalculation = function () {
sleep(60);
return '42';
};
// hasItem returns true in the false time
if (!$delayedCache->hasItem($cacheKey)) {
$delayedCache->setItem($cacheKey, $veryExpansiveCalculation);
}
$answer = $delayedCache->getItem($cacheKey);
echo 'answer is: ' . $answer;
// index.php, 10:00:10 am
$cacheKey = 'veryExpansiveCalculation';
$veryExpansiveCalculation = function () {
sleep(60);
return '42';
};
// although the result is not ready yet, hasItem will return true
if (!$delayedCache->hasItem($cacheKey)) {
$delayedCache->setItem($cacheKey, $veryExpansiveCalculation);
}
// Waits 50 seconds until the building of the cache is done and then returns
// The $veryExpansiveCalculation callback will not be executed twice, unless the
// cache is cleared
$answer = $delayedCache->getItem($cacheKey);
echo 'answer is: ' . $answer;
Alternatively you can use the short method:
$cacheKey = 'veryExpansiveCalculation';
$veryExpansiveCalculation = function () {
sleep(60);
return '42';
};
// if cache is not set, it will set and then return the cached value
$answer = $delayedCache->getCachedItem($cacheKey, $veryExpansiveCalculation);
echo 'answer is: ' . $answer;
Here is the issue tracker.
Only TDD code will be accepted. Please follow the PSR-2 code standard.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
phpunit
# Fixes code
./bin/php-cs-fix.sh
# outputs error
./bin/php-cs-fix.sh src true
./bin/php-cs-fix.sh test true