Description
This is a simple Cache Abstraction Layer for PHP >= 5.3 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. File-Cache
6. Static-PHP-Cache
Simple Cache Class alternatives and similar libraries
Based on the "Caching" category.
Alternatively, view Simple Cache Class alternatives based on common mentions on social networks and blogs.
-
scrapbook
PHP cache library, with adapters for e.g. Memcached, Redis, Couchbase, APC(u), SQL and additional capabilities (e.g. transactions, stampede protection) built on top. -
APIx Cache
A thin PSR-6 cache wrapper with a generic interface to various caching backends emphasising cache tagging and indexing. -
Cake Cache
[READ-ONLY] Easy to use Caching library with support for multiple caching backends. This repo is a split of the main code that can be found in https://github.com/cakephp/cakephp
InfluxDB - Purpose built for real-time analytics at any scale.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Simple Cache Class or a related project?
README
:zap: Simple Cache Class
This is a simple Cache Abstraction Layer for PHP >= 7.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:
- Memcached / Memcache
- Redis
- Xcache
- APC / APCu
- OpCache (via PHP-files)
- Static-PHP-Cache
Get "Simple Cache"
You can download it from here, or require it using composer.
{
"require": {
"voku/simple-cache": "4.*"
}
}
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 Travis CI for being the most awesome, easiest continous integration tool out there!
- 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
*Note that all licence references and agreements mentioned in the Simple Cache Class README section above
are relevant to that project's source code only.