voku/simple-cache

Simple Cache library

Maintainers

👁 voku

Package info

github.com/voku/simple-cache

pkg:composer/voku/simple-cache

Statistics

Installs: 2 680 632

Dependents: 6

Suggesters: 1

Stars: 32

Open Issues: 5

6.1.0 2026-04-24 00:48 UTC

Requires

Requires (Dev)

Suggests

Provides

Conflicts

None

Replaces

None

MIT c5d8b516d6780ae297adf4bcd7f87b0b81b8ccb3

phpcachecachingsimple cache


README

👁 CI
👁 FOSSA Status
👁 Coverage Status
👁 Scrutinizer Code Quality
👁 Codacy Badge
👁 Latest Stable Version
👁 Total Downloads
👁 License
👁 Donate to this project using Paypal
👁 Donate to this project using Patreon

⚡ Simple Cache Class

This is a simple Cache Abstraction Layer for PHP >= 8.0 that provides a simple interaction with your cache-server. You can define the Adapter / Serializer in the "constructor" or the class will auto-detect you server-cache in this order:

  1. Memcached / Memcache
  2. Redis
  3. Xcache
  4. APC / APCu
  5. OpCache (via PHP-files)
  6. Static-PHP-Cache

Get "Simple Cache"

You can download it from here, or require it using composer.

{
 "require": {
 "voku/simple-cache": "5.*"
 }
}

Install via "composer require"

composer require voku/simple-cache

Quick Start

use voku\cache\Cache;

require_once 'composer/autoload.php';

$cache = new Cache();
$ttl = 3600; // 60s * 60 = 1h
$cache->setItem('foo', 'bar', $ttl);
$bar = $cache->getItem('foo');

Usage

use voku\cache\Cache;

$cache = new Cache();
 
if ($cache->getCacheIsReady() === true && $cache->existsItem('foo')) {
 return $cache->getItem('foo');
} else {
 $bar = someSpecialFunctionsWithAReturnValue();
 $cache->setItem('foo', $bar);
 return $bar;
}

If you have an heavy task e.g. a really-big-loop, then you can also use static-cache. But keep in mind, that this will be stored into PHP (it needs more memory).

use voku\cache\Cache;

$cache = new Cache();
 
if ($cache->getCacheIsReady() === true && $cache->existsItem('foo')) {
 for ($i = 0; $i <= 100000; $i++) {
 echo $this->cache->getItem('foo', 3); // use also static-php-cache, when we hit the cache 3-times
 }
 return $cache->getItem('foo');
} else {
 $bar = someSpecialFunctionsWithAReturnValue();
 $cache->setItem('foo', $bar);
 return $bar;
}

PS: By default, the static cache is also used by >= 10 cache hits. But you can configure this behavior via $cache->setStaticCacheHitCounter(INT).

No-Cache for the admin or a specific ip-address

If you use the parameter "$checkForUser" (=== true) in the constructor, then the cache isn't used for the admin-session.

-> You can also overwrite the check for the user, if you add a global function named "checkForDev()".

Overwrite the auto-connection option

You can overwrite the cache auto-detect via "CacheAdapterAutoManager" and the "$cacheAdapterManagerForAutoConnect" option in the "Cache"-constructor. Additional you can also activate the "$cacheAdapterManagerForAutoConnectOverwrite" option in the "Cache"-constructor, so that you can implement your own cache auto-detect logic.

$cacheManager = new \voku\cache\CacheAdapterAutoManager();

// 1. check for "APCu" support first
$cacheManager->addAdapter(
 \voku\cache\AdapterApcu::class
);

// 2. check for "APC" support
$cacheManager->addAdapter(
 \voku\cache\AdapterApcu::class
);

// 3. try "OpCache"-Cache
$cacheManager->addAdapter(
 \voku\cache\AdapterOpCache::class,
 static function () {
 $cacheDir = \realpath(\sys_get_temp_dir()) . '/simple_php_cache_opcache';

 return $cacheDir;
 }
);

// 4. try "File"-Cache
$cacheManager->addAdapter(
 \voku\cache\AdapterFileSimple::class,
 static function () {
 $cacheDir = \realpath(\sys_get_temp_dir()) . '/simple_php_cache_file';

 return $cacheDir;
 }
);


// 5. use Memory Cache as final fallback
$cacheManager->addAdapter(
 \voku\cache\AdapterArray::class
);

$cache = new \voku\cache\CachePsr16(
 null, // use auto-detection
 null, // use auto-detection
 false, // do not check for usage
 true, // enable the cache
 false, // do not check for admin session
 false, // do not check for dev
 false, // do not check for admin session
 false, // do not check for server vs. client ip
 '', // do not use "_GET"-parameter for disabling
 $cacheManager, // new auto-detection logic
 true // overwrite the auto-detection logic
);

Support

For support and donations please visit Github | Issues | PayPal | Patreon.

For status updates and release announcements please visit Releases | Twitter | Patreon.

For professional support please contact me.

Thanks

  • Thanks to GitHub (Microsoft) for hosting the code and a good infrastructure including Issues-Managment, etc.
  • Thanks to IntelliJ as they make the best IDEs for PHP and they gave me an open source license for PhpStorm!
  • Thanks to GitHub Actions for powering the project's continuous integration pipeline.
  • Thanks to StyleCI for the simple but powerfull code style check.
  • Thanks to PHPStan && Psalm for relly great Static analysis tools and for discover bugs in the code!

License

👁 FOSSA Status