Skip to content

Repository files navigation

Koine Delayed Cache

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:

Build StatusCoverage StatusCode ClimateScrutinizer Code Quality

Package information:

Latest Stable VersionTotal DownloadsLatest Unstable VersionLicenseDependency Status

Installing

Installing via Composer

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"}}

Alternative install

Usage

$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 timeif (!$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 trueif (!$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;

When it shines

Issues/Features proposals

Here is the issue tracker.

Contributing

Only TDD code will be accepted. Please follow the PSR-2 code standard.

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

How to run the tests:

phpunit

To check the code standard run:

# Fixes code
./bin/php-cs-fix.sh
# outputs error
./bin/php-cs-fix.sh src true
./bin/php-cs-fix.sh testtrue

Lincense

MIT

Authors

About

If cache creation is in progress it waits for it

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages