A high-performance backend cache system. It is intended for use in speeding up dynamic web applications by alleviating database load.

Overview

Total Downloads Latest Stable Version License Cache Interface Extended Coding Style Simple Cache Code Climate Scrutinizer Code Quality Build Status Semver compliant Patreon

⚠️ Please note that the V9 is mostly a PHP 8 type aware update of Phpfastcache with some significant changes !

As the V9 is relatively not compatible with previous versions, please read carefully the migration guide to ensure you the smoothest migration possible. One of the biggest change is the configuration system which is now an object that replace the primitive array that we used to implement back then. Also, please note that the V9 requires at least PHP 8 or higher to works properly.


Simple Yet Powerful PHP Caching Class

More information in Wiki The simplicity of abstraction: One class for many backend cache. You don't need to rewrite your code many times again.

Supported drivers at this day *

💡 Feel free to propose a driver by making a new Pull Request, they are welcome !

Regular drivers High performances drivers Development drivers Cluster-Aggregated drivers
Apcu (APC support removed) Arangodb Devnull FullReplicationCluster
Dynamodb (AWS) Cassandra Devrandom SemiReplicationCluster
Files CouchBasev3
(Couchbase for SDK 2 support removed)
Memstatic MasterSlaveReplicationCluster
Firestore (GCP) Couchdb RandomReplicationCluster
Leveldb Mongodb
Memcache(d) Predis
Sqlite Redis
Wincache Ssdb
Zend Disk Cache Zend Memory Cache

* Driver descriptions available in DOCS/DRIVERS.md


Because caching does not mean weaken your code

Phpfastcache has been developed over the years with 3 main goals:

  • Performance: We optimized and still optimize the code to provide you the lightest library as possible
  • Security: Because caching strategies can sometimes comes with unwanted vulnerabilities, we do our best to provide you a sage & strong library as possible
  • Portability: No matter what operating system you're working on, we did our best to provide you the most cross-platform code as possible

Rich Development API

Phpfastcache provides you a lot of useful APIs:

Item API (ExtendedCacheItemInterface)

Method Return Description
addTag($tagName) ExtendedCacheItemInterface Adds a tag
addTags(array $tagNames) ExtendedCacheItemInterface Adds multiple tags
append($data) ExtendedCacheItemInterface Appends data to a string or an array (push)
decrement($step = 1) ExtendedCacheItemInterface Redundant joke...
expiresAfter($ttl) ExtendedCacheItemInterface Allows you to extends the lifetime of an entry without altering its value (formerly known as touch())
expiresAt($expiration) ExtendedCacheItemInterface Sets the expiration time for this cache item (as a DateTimeInterface object)
get() mixed The getter, obviously, returns your cache object
getCreationDate() \DatetimeInterface Gets the creation date for this cache item (as a DateTimeInterface object) *
getDataAsJsonString() string Return the data as a well-formatted json string
getEncodedKey() string Returns the final and internal item identifier (key), generally used for debug purposes
getExpirationDate() ExtendedCacheItemInterface Gets the expiration date as a Datetime object
getKey() string Returns the item identifier (key)
getLength() int Gets the data length if the data is a string, array, or objects that implement \Countable interface.
getModificationDate() \DatetimeInterface Gets the modification date for this cache item (as a DateTimeInterface object) *
getTags() string[] Gets the tags
getTagsAsString($separator = ', ') string Gets the data as a string separated by $separator
getTtl() int Gets the remaining Time To Live as an integer
increment($step = 1) ExtendedCacheItemInterface To allow us to count on an integer item
isEmpty() bool Checks if the data is empty or not despite the hit/miss status.
isExpired() bool Checks if your cache entry is expired
isHit() bool Checks if your cache entry exists and is still valid, it's the equivalent of isset()
isNull() bool Checks if the data is null or not despite the hit/miss status.
prepend($data) ExtendedCacheItemInterface Prepends data to a string or an array (unshift)
removeTag($tagName) ExtendedCacheItemInterface Removes a tag
removeTags(array $tagNames) ExtendedCacheItemInterface Removes multiple tags
set($value) ExtendedCacheItemInterface The setter, for those who missed it, can be anything except resources or non-serializer object (ex: PDO objects, file pointers, etc).
setCreationDate($expiration) \DatetimeInterface Sets the creation date for this cache item (as a DateTimeInterface object) *
setEventManager($evtMngr) ExtendedCacheItemInterface Sets the event manager
setExpirationDate() ExtendedCacheItemInterface Alias of expireAt() (for more code logic)
setModificationDate($expiration) \DatetimeInterface Sets the modification date for this cache item (as a DateTimeInterface object) *
setTags(array $tags) ExtendedCacheItemInterface Sets multiple tags

* Require configuration directive "itemDetailedDate" to be enabled, else a \LogicException will be thrown

ItemPool API (ExtendedCacheItemPoolInterface)

Methods (By Alphabetic Order) Return Description
appendItemsByTag($tagName, $data) bool Appends items by a tag
appendItemsByTags(array $tagNames, $data) bool Appends items by one of multiple tag names
attachItem($item) void (Re-)attaches an item to the pool
clear() bool Allows you to completely empty the cache and restart from the beginning
commit() bool Persists any deferred cache items
decrementItemsByTag($tagName, $step = 1) bool Decrements items by a tag
decrementItemsByTags(array $tagNames, $step = 1) bool Decrements items by one of multiple tag names
deleteItem($key) bool Deletes an item
deleteItems(array $keys) bool Deletes one or more items
deleteItemsByTag($tagName) bool Deletes items by a tag
deleteItemsByTags(array $tagNames, int $strategy) bool Deletes items by one of multiple tag names
detachItem($item) void Detaches an item from the pool
getConfig() ConfigurationOption Returns the configuration object
getConfigOption($optionName); mixed Returns a configuration value by its key $optionName
getDefaultConfig() ConfigurationOption Returns the default configuration object (not altered by the object instance)
getDriverName() string Returns the current driver name (without the namespace)
getEventManager() EventManagerInterface Gets the event manager
getHelp() string Provides a very basic help for a specific driver
getInstanceId() string Returns the instance ID
getItem($key) ExtendedCacheItemInterface Retrieves an item and returns an empty item if not found
getItems(array $keys) ExtendedCacheItemInterface[] Retrieves one or more item and returns an array of items
getItemsAsJsonString(array $keys) string Returns A json string that represents an array of items
getItemsByTag($tagName, $strategy) ExtendedCacheItemInterface[] Returns items by a tag
getItemsByTags(array $tagNames, $strategy) ExtendedCacheItemInterface[] Returns items by one of multiple tag names
getItemsByTagsAsJsonString(array $tagNames, $strategy) string Returns A json string that represents an array of items corresponding
getStats() DriverStatistic Returns the cache statistics as an object, useful for checking disk space used by the cache etc.
hasEventManager() bool Check the event manager
hasItem($key) bool Tests if an item exists
incrementItemsByTag($tagName, $step = 1, $strategy) bool Increments items by a tag
incrementItemsByTags(array $tagNames, $step = 1, $strategy) bool Increments items by one of multiple tag names
isAttached($item) bool Verify if an item is (still) attached
prependItemsByTag($tagName, $data, $strategy) bool Prepends items by a tag
prependItemsByTags(array $tagNames, $data, $strategy) bool Prepends items by one of multiple tag names
save(CacheItemInterface $item) bool Persists a cache item immediately
saveDeferred(CacheItemInterface $item) bool Sets a cache item to be persisted later
saveMultiple(...$items) bool Persists multiple cache items immediately
setEventManager(EventManagerInterface $evtMngr) ExtendedCacheItemPoolInterface Sets the event manager

🆕 in V8: Multiple strategies ($strategy) are now supported for tagging:

  • TaggableCacheItemPoolInterface::TAG_STRATEGY_ONE allows you to get cache item(s) by at least ONE of the specified matching tag(s). Default behavior.
  • TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL allows you to get cache item(s) by ALL of the specified matching tag(s) (the cache item can have additional tag(s))
  • TaggableCacheItemPoolInterface::TAG_STRATEGY_ONLY allows you to get cache item(s) by ONLY the specified matching tag(s) (the cache item cannot have additional tag(s))

It also supports multiple calls, Tagging, Setup Folder for caching. Look at our examples folders for more information.

Phpfastcache versioning API

Phpfastcache provides a class that gives you basic information about your Phpfastcache installation

  • Get the API version (Item+Pool interface) with Phpfastcache\Api::GetVersion();
  • Get the API changelog (Item+Pool interface) Phpfastcache\Api::getChangelog();
  • Get the Phpfastcache version with Phpfastcache\Api::getPhpfastcacheVersion();
  • Get the Phpfastcache changelog Phpfastcache\Api::getPhpfastcacheChangelog();

Want to keep it simple ?

😅 Good news, as of the V6, a Psr16 adapter is provided to keep the cache simplest using very basic getters/setters:

  • get($key, $default = null);
  • set($key, $value, $ttl = null);
  • delete($key);
  • clear();
  • getMultiple($keys, $default = null);
  • setMultiple($values, $ttl = null);
  • deleteMultiple($keys);
  • has($key);

Basic usage:



use Phpfastcache\Helper\Psr16Adapter;

$defaultDriver = 'Files';
$Psr16Adapter = new Psr16Adapter($defaultDriver);

if(!$Psr16Adapter->has('test-key')){
    // Setter action
    $data = 'lorem ipsum';
    $Psr16Adapter->set('test-key', 'lorem ipsum', 300);// 5 minutes
}else{
    // Getter action
    $data = $Psr16Adapter->get('test-key');
}


/**
* Do your stuff with $data
*/

Internally, the Psr16 adapter calls the Phpfastcache Api via the cache manager.


Introducing to events

?? As of the V6, Phpfastcache provides an event mechanism. You can subscribe to an event by passing a Closure to an active event:



use Phpfastcache\EventManager;

/**
* Bind the event callback
*/
EventManager::getInstance()->onCacheGetItem(function(ExtendedCacheItemPoolInterface $itemPool, ExtendedCacheItemInterface $item){
    $item->set('[HACKED BY EVENT] ' . $item->get());
});

An event callback can get unbind but you MUST provide a name to the callback previously:


use Phpfastcache\EventManager;

/**
* Bind the event callback
*/
EventManager::getInstance()->onCacheGetItem(function(ExtendedCacheItemPoolInterface $itemPool, ExtendedCacheItemInterface $item){
    $item->set('[HACKED BY EVENT] ' . $item->get());
}, 'myCallbackName');


/**
* Unbind the event callback
*/
EventManager::getInstance()->unbindEventCallback('onCacheGetItem', 'myCallbackName');

🆕 As of the V8 you can simply subscribe to every events of Phpfastcache.

More information about the implementation and the events are available on the Wiki


Introducing new helpers

📚 As of the V6, Phpfastcache provides some helpers to make your code easier.

May more will come in the future, feel free to contribute !


Introducing aggregated cluster support

Check out the WIKI to learn how to implement aggregated cache clustering feature.


As Fast To Implement As Opening a Beer

👍 Step 1: Include phpFastCache in your project with composer:

composer require phpfastcache/phpfastcache

🚧 Step 2: Setup your website code to implement the phpFastCache calls (with Composer)

'/var/www/phpfastcache.com/dev/tmp', // or in windows "C:/tmp/" ])); // In your class, function, you can call the Cache $InstanceCache = CacheManager::getInstance('files'); /** * Try to get $products from Caching First * product_page is "identity keyword"; */ $key = "product_page"; $CachedString = $InstanceCache->getItem($key); $your_product_data = [ 'First product', 'Second product', 'Third product' /* ... */ ]; if (!$CachedString->isHit()) { $CachedString->set($your_product_data)->expiresAfter(5);//in seconds, also accepts Datetime $InstanceCache->save($CachedString); // Save the cache item just like you do with doctrine and entities echo 'FIRST LOAD // WROTE OBJECT TO CACHE // RELOAD THE PAGE AND SEE // '; echo $CachedString->get(); } else { echo 'READ FROM CACHE // '; echo $CachedString->get()[0];// Will print 'First product' } /** * use your products here or return them; */ echo implode('
', $CachedString->get());// Will echo your product list ">

use Phpfastcache\CacheManager;
use Phpfastcache\Config\ConfigurationOption;

// Setup File Path on your config files
// Please note that as of the V6.1 the "path" config 
// can also be used for Unix sockets (Redis, Memcache, etc)
CacheManager::setDefaultConfig(new ConfigurationOption([
    'path' => '/var/www/phpfastcache.com/dev/tmp', // or in windows "C:/tmp/"
]));

// In your class, function, you can call the Cache
$InstanceCache = CacheManager::getInstance('files');

/**
 * Try to get $products from Caching First
 * product_page is "identity keyword";
 */
$key = "product_page";
$CachedString = $InstanceCache->getItem($key);

$your_product_data = [
    'First product',
    'Second product',
    'Third product'
     /* ... */
];

if (!$CachedString->isHit()) {
    $CachedString->set($your_product_data)->expiresAfter(5);//in seconds, also accepts Datetime
	$InstanceCache->save($CachedString); // Save the cache item just like you do with doctrine and entities

    echo 'FIRST LOAD // WROTE OBJECT TO CACHE // RELOAD THE PAGE AND SEE // ';
    echo $CachedString->get();

} else {
    echo 'READ FROM CACHE // ';
    echo $CachedString->get()[0];// Will print 'First product'
}

/**
 * use your products here or return them;
 */
echo implode('
'
, $CachedString->get());// Will echo your product list
💾 Legacy support (Without Composer)

* See the file examples/withoutComposer.php for more information.
⚠️ The legacy autoload will be removed in the next major release ⚠️
Please include Phpfastcache through composer by running composer require phpfastcache/phpfastcache.

Step 3: Enjoy ! Your website is now faster than lightning !

For curious developers, there is a lot of other examples available here.

💥 Phpfastcache support

Found an issue or have an idea ? Come here and let us know !

Comments
  • Memcached ignores custom host/port configurations

    Memcached ignores custom host/port configurations

    Configuration

    • PhpFastCache version: "7.0.4"
    • PhpFastCache API version: "2.0.4"
    • PHP version: "7.3.2"
    • Operating system: "Debian 9 (Docker image: php:7.3-apache-stretch)"

    My question How can I use memcached driver when connecting to a Docker memcached container ?

    The following code below doesn't seem to work:

    <?php
    
    use Phpfastcache\Helper\Psr16Adapter;
    use Phpfastcache\CacheManager;
    use Phpfastcache\Drivers;
    
    $ip = '192.168.2.200';
    $port = 11211;
    
    $cfg = [
        'host' => $ip,
        'port' => $port
    ];
    
    $driver = CacheManager::Memcached(new Drivers\Memcached\Config($cfg));
    $cache = new Psr16Adapter($driver);
    $cache->set('foo', 'bar');
    echo $cache->get('foo');
    

    The above code returns:

    Fatal error: Uncaught Phpfastcache\Exceptions\PhpfastcacheDriverConnectException: Memcached failed to connect with the following error message: "Memcached seems to not be connected" line 115 in /srv/app/vendor/phpfastcache/phpfastcache/lib/Phpfastcache/Drivers/Memcached/Driver.php


    However, when I test the same memcached connection using plain PHP, it works:

    $mc = new Memcached();
    $mc->addServer($ip, $port);
    $mc->set('foo', 'bar');
    echo $mc->get('foo');
    

    Any ideas why?

    ?_? Question :) Closed :] Not a bug 
    opened by zkwbbr 37
  • performance regression with v6

    performance regression with v6

    Configuration:

    PhpFastCache version: 6.0.1 / 5.0.16 PHP version: 7.0 Operating system: Linux / Windows

    Issue description:

    I've updated a project to phpfastcache v6 and noticed a perfomance regression. The project is running on windows using the wincache driver with php 7.0. The perfomance regression compared to 5.0.16 is between 15%-25%.

    I've created a test case, which I've ran under Linux as well using the files backend. The numbers are comparable. v5.0.16: first run with empty cache: 14.666780948639 second run with full cache: 0.75569796562195

    v6.0.1: first run with empty cache: 17.629030942917 second run with full cache: 1.1219041347504

    The code I used writes 100.000 entries and then reads them again from the cache:

    <?php
    
    require_once('vendor/autoload.php');
    
    use \phpFastCache\CacheManager;
    
    $cache = CacheManager::getInstance('files');
    $cycles = 100000;
    
    function compute_str($arg) {
        $str = __FUNCTION__ . '-' . $arg . '-' . '[email protected]';
        $key = str_replace(array('{', '}', '(', ')', '/', '\\', '@', ':'), '_', $str);
        return $key;
    }
    
    function compute_md5($arg) {
        $str = __FUNCTION__ . '-' . $arg . '-' . '[email protected]';
        $key = md5($str);
        return $key;
    }
    
    function compute_sha1($arg) {
        $str = __FUNCTION__ . '-' . $arg . '-' . '[email protected]';
        $key = sha1($str);
        return $key;
    }
    
    
    function compute($arg) {
        return compute_sha1($arg);
    }
    
    $before = microtime(true);
    for ($i=0; $i<$cycles; $i++) {
        $key = compute($i);
        $cachedNum = $cache->getItem($key);
        if (is_null($cachedNum->get())) {
            $cachedNum->set($i*$i);
            $cache->save($cachedNum);
        } else {
            $num = $cachedNum->get();
            if ($num != $i*$i) {
                print ("Something went wrong: " . $i . " -> " . $num);
            }
        }
    }
    $after = microtime(true);
    $duration = $after - $before;
    print ('first run with empty cache: ' . $duration . "\n");
    
    $before = microtime(true);
    for ($i=0; $i<$cycles; $i++) {
        $key = compute($i);
        $cachedNum = $cache->getItem($key);
        if (is_null($cachedNum->get())) {
            $cachedNum->set($i*$i);
            $cache->save($cachedNum);
        } else {
            $num = $cachedNum->get();
            if ($num != $i*$i) {
                print ("Something went wrong: " . $i . " -> " . $num);
            }
        }
    }
    $after = microtime(true );
    $duration = $after - $before;
    print ('second run with full cache: ' . $duration . "\n");
    
    $cache->clear();
    
    ^_^ Improvement :) Closed 6.0 6.1 
    opened by mbiebl 34
  • Files driver issue after clearing cache.

    Files driver issue after clearing cache.

    For files driver call:

    <?php
    
    require_once 'vendor/autoload.php';
    
    use phpFastCache\CacheManager;
    
    CacheManager::setDefaultConfig(array('path' => __DIR__ . '/cache'));
    $c = CacheManager::getInstance('Files');
    // set value
    $it = $c->getItem('test');
    $it->set('value');
    $c->save($it);
    
    $c->deleteItem('test');
    
    var_dump($c->hasItem('test'));
    
    $c->clear();
    
    try {
        $has = $c->hasItem('test'); // raises non-sense error: PLEASE CHMOD  - 511 OR ANY WRITABLE PERMISSION!
        var_dump($has);
    } catch (Exception $e) {
        print $e->getMessage() . "\n";
    }
    

    After clearing cache you can't set value for the item that existed before clear has been called. All due to PathSeekerTrait / IOHelperTrait variable $this->tmp - it's not cleared.

    So this code is not called, https://github.com/PHPSocialNetwork/phpfastcache/blob/final/src/phpFastCache/Core/PathSeekerTrait.php#L76-L98 so cache directory does not exist, so realpath returns empty string here https://github.com/PHPSocialNetwork/phpfastcache/blob/final/src/phpFastCache/Core/PathSeekerTrait.php#L104 and you end with a path like /files, which in fact is not writable.

    I assume that to fix this you should reset $this->tmp in driverClear method, but I'm new to this library and I bet you'll do this in a proper way.

    Best regards, Adam

    opened by bukowskiadam 33
  • 4.3.8 PHP Warning (not in 4.3.7)

    4.3.8 PHP Warning (not in 4.3.7)

    After upgrading phpfastcache to 4.3.8 from 4.3.7 i get a bunch of warnings in the log file:

    [02-Mar-2016 23:31:28 Europe/Stockholm] PHP Warning: file_exists(): open_basedir restriction in effect. File(/secret/Data/Library/phpFastCache/CacheManager.php) is not within the allowed path(s): (secret) in /secret/api/vendor/hoa/core/Consistency.php on line 354

    [02-Mar-2016 23:31:28 Europe/Stockholm] PHP Warning: file_exists(): open_basedir restriction in effect. File(/secret/Data/Library/phpFastCache/CacheManagerphpFastCache/CacheManager.php) is not within the allowed path(s): (secret) in /secret/api/vendor/hoa/core/Consistency.php on line 355

    Not cure how hoa/core is related to phpFastCache but after downgrading phpfastcache to 4.3.7 the issue dispersal. Guessing it's an issue with your new autoloader? :)

    ^_^ Fixed 
    opened by w3l 32
  • Couchbase Error

    Couchbase Error

    Configuration:

    PhpFastCache version: 7 PHP version: 7.1.10 Operating system: Windows 2008 R2 X64

    When using the Couchbase driver on a vanilla install of the last version of PHPFASTCACHE, I'm getting the error:

    Couchbase\Cluster::__construct() expects exactly 1 parameter, 3 given Error File: W:\web\localuser\competency.io\competency.io\assets\plugins\phpFastCache.v7\src\phpFastCache\Drivers\Couchbase\Driver.php Error Line: 149

    Changing it from: $this->instance = new CouchbaseClient("couchbase://{$host}", $username, $password);

    to: $this->instance = new CouchbaseClient("couchbase://{$host}");

    Fixed the issue

    0_0 Bug ^_^ Fixed :) Closed ~_~ Issue confirmed 7.0 
    opened by rdecourtney 29
  • SSDB driver poor perfomance

    SSDB driver poor perfomance

    ###Configuration:

    PhpFastCache version: 5.0.14 PHP version: 7.0.14 Operating system: Debian 8 x64

    ####Issue description:

    Hi, Georges. Not an issue really, more a question.

    Found out that SSDB driver shows really bad perfomance under load of 5 requests\sec and more (really small load, isn't it). I have fast SSD on my server, and SSDB daemon is constantly writing something on it really fast, and under moderate load (20 req\s) it takes approx. 1-2-3 sec to return a result, and for some part of queries it is 10-12 sec, which is, of course, inappropriate for cache.

    Most time consumption is here: phpssdb\Core\SSDB::recv and phpssdb\Core\SSDB::recv_resp (may take 10s or more to return a result). Here is a php trace from NewRelic (screen):

    http://imgur.com/a/wvOyJ

    As you can see, it took 2,8s + 4.5s + 0.5s to perform 3 calls of phpssdb\Core\SSDB::recv_resp.

    Do you have any idea why is this happened? (i use mostly the same code as in phpfastcache/examples/ssdb.php)

    0_0 Bug ?_? Question 6.0 5.0 
    opened by git-webmaster 26
  • Multiple driver errors caused by invalid return type of `driverRead()`

    Multiple driver errors caused by invalid return type of `driverRead()`

    Configuration

    • PhpFastCache version: 9.0.2
    • PhpFastCache API version: 4.0.0
    • PHP version: 8.0.13
    • Operating system: Ubuntu

    Describe the bug

    I don't really know the nature of the bug, but it seems to come from the File driver Phpfastcache\Drivers\Files\Driver::driverRead()

    To Reproduce Code to reproduce the issue:

    /** @var ExtendedCacheItemPoolInterface */
    $cacheManager = $this->container->get(CacheManager::class);
    $cacheString = "SimplyString";
    $cacheItem = $cacheManager->getItem($cacheString);
    

    Driver used : files

    Stacktrace

    TypeError: Phpfastcache\Drivers\Files\Driver::driverRead(): Return value must be of type ?array, bool returned in /var/www/html/vendor/phpfastcache/phpfastcache/lib/Phpfastcache/Drivers/Files/Driver.php:74
    Stack trace:
    #0 /var/www/html/vendor/phpfastcache/phpfastcache/lib/Phpfastcache/Core/Pool/CacheItemPoolTrait.php(132): Phpfastcache\Drivers\Files\Driver->driverRead(Object(Phpfastcache\Drivers\Files\Item))
    #1 /var/www/html/src/core/middleware/MaintenanceMiddleware.php(32): Phpfastcache\Drivers\Files\Driver->getItem('MaintenanceAuto...')
    ...
    #7 {main}
    
    0_0 Bug ^_^ Fixed 9.1 
    opened by ShockedPlot7560 25
  • Api Method

    Api Method "deleteItemsByTagsAll()" removes unrelated items

    When You add multiple items that have their own tag and also share a tag it seems that when you delete an item using deleteItemsByTagsAll(['sharedTag', 'ownTag']) that all items that share 'sharedTag' are also removed.

    Following the docs it should only remove items that have multiple tags or all you set for this function, not one or more like deleteItemsByTags() does.

    This happens for me on Couchbase buckets.

    To Reproduce Steps to reproduce the behavior:

    1. Save multiple items with a shared tag and their own tag (like ID)
    2. Remove one of the items by it's IDtag and the sharedTag using deleteItemsByTagsAll(['sharedTag', 'ownTag'])

    So 10 items should be in total 21 => 10 items, 10 unique tags items, 1 shared tag item

    Expected behavior One item removed and one (unique) tag, so 2 items less in the bucket and the rest should stay

    Current behavior All items that share the shared tags are removed, so also are their individual tags.

    ^_^ Fixed :) Closed 8.0 
    opened by di-rect 25
  • how to use redis when my hosting provider use a sock for the connexion

    how to use redis when my hosting provider use a sock for the connexion

    Configuration:

    PhpFastCache version: 6.0.8 PHP version: 7.1 Operating system: Apache ???

    Issue description:

    Hi, i know that my hosting provider tell us that for using redis, we have to connect with a socket like /var/run/redis/redis.sock i tried to do that : $InstanceCache = CacheManager::getInstance('redis', [ 'host' => '/var/run/redis/redis.sock' ]); but i had a fatal error PHP message: PHP Warning: Redis::connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/calendriergratuit.fr/www/vendor/phpfastcache/phpfastcache/src/phpFastCache/Drivers/Redis/Driver.php on line 137

    How to configure redis driver in my case?

    ^_^ Fixed :) Closed ~_~ Issue confirmed 6.1 7.0 
    opened by pioc92 24
  • All data is gone for seconds

    All data is gone for seconds

    I using this beautiful cache class, but when my storage is files or sqlite numerous data is gone for 1 (one second) and shows again after that second. I want to prevent that thing. How to do that ? Or I must use memcache type ?

    ^_^ Improvement 
    opened by ghost 22
  • Couchbase document query using N1QL

    Couchbase document query using N1QL

    Hi Guys,

    This is a great library and also use a lot I see. I'm a huge fan of Couchbase and wondered if you thought about the fat that you can also query buckets their document using N1QL. I cannot see if it's in the library but would that be an idea to add ?

    Thanks a lot for this great library!

    Cheers,

    Matt

    ^_^ Improvement ?_? Question :) Closed 
    opened by Yamakasi 21
Releases(9.1.2)
  • 9.1.2(Jun 9, 2022)

    • API
    • Core
      • Rewrote some core code to improve code maintainability & readability following Scrutinizer and Phpstan recommendations
      • Fixed an issue with tags not properly reinitialized when a backend driver returns an expired cache item
    • Drivers
      • Fixed #866 // Deprecated Method Cassandra\ExecutionOptions starting of Cassandra 1.3
    • Misc
      • Increased PHPSTAN level to 6
      • Fixed multiple fails of Travis CI
      • Migrated Github issue templates from Markdown to YAML configurations
    Source code(tar.gz)
    Source code(zip)
  • 8.1.3(May 25, 2022)

    "Don't throw the masks, yet."

    • Core
      • Fixed #860 // Cache item throw an error on save with DateTimeImmutable date objects
    • Drivers
      • Fixed #866 // Deprecated Method Cassandra\ExecutionOptions starting of Cassandra 1.3
    Source code(tar.gz)
    Source code(zip)
  • 9.1.1(Apr 15, 2022)

    • Core
      • Fixed #860 // Cache item throw an error on reading with DateTimeImmutable date objects
      • Fixed an issue with tags not properly reinitialized when a backend driver returns an expired cache item
    • Drivers
      • Fixed #862 // Multiple driver errors caused by invalid return type of driverRead() (reported by @ShockedPlot7560 and @aemla)
    Source code(tar.gz)
    Source code(zip)
  • 9.1.0(Apr 3, 2022)

    • API
    • Core
      • Added \Phpfastcache\Helper\UninstanciableObjectTrait trait which will contains base locked constructor for any classes that are nor meant to be instanciated.
      • Deprecated \Phpfastcache\Config\Config::class
      • Removed/reworked/improved dead/unreachable/redundant/obsolete code, thanks to Phpstan
    • Drivers
      • Added Solr driver support
    • Events
      • Added \Phpfastcache\Event\EventInterface for \Phpfastcache\Event\Event and subclasses below
      • Added \Phpfastcache\Drivers\Arangodb\Event for Arangodb events
      • Added \Phpfastcache\Drivers\Dynamodb\Event for Dynamodb events
      • Added \Phpfastcache\Drivers\Solr\Event for Solr events
      • Moved the following constant from \Phpfastcache\Event\Event to their respective drivers: ARANGODB_CONNECTION, ARANGODB_COLLECTION_PARAMS, DYNAMODB_CREATE_TABLE
    • Cluster
      • Fixed #855 // ClusterReplication drivers are saving erroneous expiration date in low-level backends
    • Misc
      • Full PSR-12 compliance is now enforced by PHPCS
      • Multiple typo fixes (@mbiebl)
      • Updated composer suggestions and CI builder dependencies
    Source code(tar.gz)
    Source code(zip)
  • 9.0.2(Mar 4, 2022)

    • Core
      • Updated CacheContract::__invoke() signature
      • Added new option to allow EventManager override + improved EventManager tests (EventManager::setInstance())
    • Drivers
      • Fixed #853 // Configuration validation issue with Memcached socket (path)
    • Misc
      • Fixed typo and some types hint
    Source code(tar.gz)
    Source code(zip)
  • 8.1.2(Mar 4, 2022)

  • 8.1.1(Feb 21, 2022)

  • 8.1.0(Jan 5, 2022)

    "Re-Vaccinated"

    • Core
      • Fixed #831 // Bug in the PSR-16 getMultiple method
    • Utils
      • Fixed #846 // PHP 8.1 compatibility bug
    • Drivers
      • Fixed #840 // Invalid type hint found for "htaccess", expected "string" got "boolean" for leveldb driver
    • Misc
      • Updated some docs files (fixed typos)
    • Tests
      • Migrate all Travis tests on bionic
    Source code(tar.gz)
    Source code(zip)
  • 9.0.1(Nov 14, 2021)

    • Core
      • Added \Phpfastcache\Event\Event class for centralizing event name with reusable constants.
    • Item
      • \Psr\Cache\CacheItemInterface::set will also no longer accepts resource object anymore as method unique parameter
    • Misc
    Source code(tar.gz)
    Source code(zip)
  • 9.0.0(Oct 31, 2021)

    • Migration guide
    • PSR-6
      • Upgraded psr/cache dependency to ^2.0||^3.0 (for PHP-8 types)
      • \Psr\Cache\CacheItemInterface::get() slightly changed to fully comply with missing PSR-6 specification: If the cache item is NOT hit, this method will return NULL.
    • PSR-16
      • To be written when the PSR-16 will be upgraded for PHP-8
    • API
      • Upgraded Phpfastcache API 4.0.0 (see changes)
      • Renamed Api::getPhpFastCacheVersion() to Api::getPhpfastcacheVersion()
      • Renamed Api::getPhpFastCacheChangelog() to Api::getPhpfastcacheChangelog()
      • Renamed Api::getPhpFastCacheGitHeadHash() to Api::getPhpfastcacheGitHeadHash()
    • Cluster
      • Renamed \Phpfastcache\Cluster\AggregatorInterface::aggregateNewDriver() to \Phpfastcache\Cluster\AggregatorInterface::aggregateDriverByName()
    • Exceptions
      • Added PhpfastcacheEventManagerException for EventManager-related exceptions
    • Global
      • Removed magics methods from CacheManager CacheManager::DriverName(), use CacheManager::getInstance('DriverName') instead
      • \Phpfastcache\Proxy\PhpfastcacheAbstractProxy now implements \Phpfastcache\Proxy\PhpfastcacheAbstractProxyInterface
      • Slightly increased performances on some critical points of the library
      • Removed "BadPracticeOMeter" notice in CacheManager
      • Removed many code duplicate (like in \Phpfastcache\Driver\[DRIVER_NAME]\Item classes)
      • Reworked traits inter-dependencies for better logic and less polymorphic calls in pool/item traits
      • Upgrading library to use benefits of PHP 8 new features (see below)
      • Typed every class properties of the library
      • Migrated many Closure to arrow functions
      • Updated parameters & return type hint to use benefit of covariance and contravariance
      • Removed embedded Autoload, Phpfastcache is now only Composer-compatible.
      • Removed embedded dependencies (psr/cache, psr/simple-cache)
    • Helpers
      • Deprecated \Phpfastcache\Helper\CacheConditionalHelper, use \Phpfastcache\CacheContract instead
      • The \Phpfastcache\CacheContract class is now also callable directly without calling get() method
    • Config/Options
      • Configuration object will now be locked once the cache pool instance is running.
      • Updated ConfigurationOption which is no longer an ArrayObject class, therefore array-syntax is no longer available.
      • Removed configuration entry htaccess for files-based drivers.
      • Removed IOConfigurationOptionTrait::getHtaccess()
      • Removed IOConfigurationOptionTrait::setHtaccess()
    • Tests
      • Added PHPMD, PHPCS and PHPSTAN coverages to increase quality of the project
      • Updated tests to work with new core/drivers changes
      • Removed Autoload test since its support has been removed and now only managed by Composer
      • Increased tests reliability and code coverage for better catching any eventual regression
    • Item
      • \Psr\Cache\CacheItemInterface::set will not accept \Closure object anymore as method unique parameter
    • Drivers
      • Added Arangodb driver support
      • Added Dynamodb (AWS) driver support
      • Added Firestore (GCP) driver support
      • Removed Cookie driver because of its potential dangerosity
      • Removed Couchbase (SDK 2 support dropped) driver which is now replaced by Couchbasev3 (SDK 3)
      • Removed Devtrue and Devfalse drivers
      • Added Devrandom with configurable factor chance and data length
      • Renamed classes \Phpfastcache\Cluster\Drivers\[STATEGY]\[CLUSTER_NAME]Cluster to \Phpfastcache\Cluster\Drivers\[STATEGY]\Driver for better driver naming across the project
    • Events
      • Added \Phpfastcache\Event\EventReferenceParameter class and more events such as driver-specific events, see EVENTS.md file for more information
      • Event callbacks will now receive the eventName as an extra last callback parameter (except for onEveryEvents callbacks)
      • Added EventManagerInterface::on(array $eventNames, $callback) method, to subscribe to multiple events in once with the same callback
      • Added method named unbindAllEventCallbacks(): bool to EventManagerInterface to allow you to unbind/clear all event from an event instance
      • Updated argument type #2 ($items) of onCacheSaveMultipleItems() event from ExtendedCacheItemInterface[] to EventReferenceParameter($items)
      • Updated argument type #2 ($items) of onCacheCommitItem() event from ExtendedCacheItemInterface[] to EventReferenceParameter($items)
      • Updated argument type #2 ($value) of onCacheItemSet() event from mixed to EventReferenceParameter(mixed $value)
    • Misc
      • Increased minimum PHP compatibility in composer to ^8.0
      • Updated copyright headers on every file to include the many project contributors
      • Globally renamed every occurrence of PhpFastCache to Phpcastcache
    Source code(tar.gz)
    Source code(zip)
  • 8.0.8(Aug 18, 2021)

    "Sanitary-passed"

    • Core
      • Fixed small date issue with tag items that stays longer than necessary active in backend
    • Drivers
      • Improved Mongodb driver code
      • Improved Couchdb driver code
      • Improved Couchbase driver code (SDK 2 version)
      • Implemented #721 // Added Couchbase SDK 3 support (use Couchbasev3 driver name)
    • Misc
      • Increased test reliability by adding more code coverage in CRUD tests and by performing some updates on Travis CI
    Source code(tar.gz)
    Source code(zip)
  • 8.0.7(Aug 14, 2021)

    "Vaccinated"

    • Drivers
      • Improved Couchdb driver code and tests
      • Dropped Riak support permanently (unmaintainable)
    • Docs
      • ⚠️ CVE-2021-37704 Fixed vulnerability issue that cause exposed phpinfo() in some situations (@geolim4)
    Source code(tar.gz)
    Source code(zip)
  • 7.1.2(Aug 14, 2021)

    "Rust-weak"

    • Global
      • Improved PHP 7.4 support
      • Fixed #768 // Psalm issue with the 3rd parameter of Psr16Adapter::set has to be null (@geolim4)
      • Fixed #781 // Type issue (@geolim4)
    • Docs
      • ⚠️ CVE-2021-37704 Fixed vulnerability issue that cause exposed phpinfo() in some situations (@geolim4)
    • Drivers
      • Fixed #759 // Memcached Bytes Replaced with Version (@geolim4)
    Source code(tar.gz)
    Source code(zip)
  • 6.1.5(Aug 14, 2021)

  • 8.0.6(Jul 7, 2021)

  • 8.0.5(Apr 5, 2021)

    "Re-re-confined"

    • Drivers
      • Fixed #782 // Random warning in Files driver
      • Fixed #781 // bad type hint Riak driver
      • Fixed #788 // Redundant directory name for Sqlite
    Source code(tar.gz)
    Source code(zip)
  • 8.0.4(Dec 21, 2020)

    "Confined Xmas"

    • Core
      • Added full PHP8 compatibility
    • Tests
      • Added PHP8 test suite
    • Drivers
      • Fixed #774 // Redis config cannot accept null values as the given example (@GeoSot)
    • Misc
      • Small optimizations
    Source code(tar.gz)
    Source code(zip)
  • 8.0.3(Nov 24, 2020)

    "Reconfined"

    • Core
      • Fixed #768 // Psalm issue with the 3rd parameter of Psr16Adapter::set has to be null (@geolim4)
      • Fixed #771 // DeleteItemsByTags was ignoring strategy #772 (@GeoSot)
      • Fixed inconsistent behavior of "defaultKeyHashFunction" and "defaultFileNameHashFunction" + added tests for them (@geolim4)
      • Implemented #754 // Added deactivatable static item caching support (@geolim4)
    • Tests
      • Fixed test title for "DisabledStaticItemCaching.test.php"
    • Drivers
      • Fixed #759 // Memcached Bytes Replaced with Version (@geolim4)
    Source code(tar.gz)
    Source code(zip)
  • 8.0.2(Aug 28, 2020)

  • 8.0.1(Apr 24, 2020)

  • 7.1.1(Apr 24, 2020)

    "Rust-out"

    • Drivers
      • Fixed #716 // TypeError in lib/Phpfastcache/Drivers/Cookie/Driver.php (@motikan2010)
      • Fixed #733 // Removing path check in Redis driver before auth. (@gillytech)
    • Helpers
      • Fixed #717 // Deprecate "ActOnAll" to remove it in v8 (@geolim4)
    • Misc
      • Added v8 mention in Readme (@geolim4)
      • Added Github Funding option (@geolim4)
    Source code(tar.gz)
    Source code(zip)
  • 8.0.0(Mar 22, 2020)

    "The quarantine"

    • Removed "Auto" driver in CacheManager::getInstance() you will now be mandatory to specify the driver to use.
    • Removed deprecated feature CacheManager::setNamespacePath() (replaced by cache manager "override" or "custom driver" features)
    • Upgraded minimum php version support: 7.3+
    • Upgraded Phpfastcache API from 2.0.4 to 3.0.0, be careful, there some minor Breaking Changes (BC).
    • Implemented aggregated cluster support (See the Readme.MD)
    • Removed Xcache support which is now completely abandoned (latest update: 2014)
    • Removed Apc (but not APCu) support which is now completely abandoned (latest update: 2012)
    • Removed CacheManager::getStaticSystemDrivers() (use CacheManager::getDriverList() instead)
    • Added (required) cookie driver option awareOfUntrustableData to enforce developer awareness of non-reliable data storage
    • Removed driver option ignoreSymfonyNotice and its getter/setter
    • The "ActOnAll Helper" have been removed in profit of aggregated cluster support
    • Implemented #713 // Reworked "tags" feature by adding 3 strategies: TAG_STRATEGY_ONE, TAG_STRATEGY_ALL, TAG_STRATEGY_ONLY
    • Removed global static properties CacheManager::$ReadHits, CacheManager::$WriteHits replaced by\Phpfastcache\Entities\DriverIO callable in\Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface::getIO
    • Removed deprecated method ConfigurationOption::getOption() use getOptionName() instead
    • Removed deprecated config option $ignoreSymfonyNotice
    • Removed "fallback" feature (use aggregated cluster Master/Slave instead)
    • Enforced PSR-12 compliance
    • Deprecated legacy autoload for removal in next major release
    Source code(tar.gz)
    Source code(zip)
  • 7.1.0(Sep 15, 2019)

    "Wake the rust"

    • Drivers

      • Fixed #692 // MongoDB driver DNS seedlist format (@Geolim4)
      • Fixed #679 // TLS connexion for (P)Redis (@Geolim4)
      • Fixed #689 // (P)redis persistent / pooled connections (@Geolim4)
      • Fixed #680 // APC driverClear fails (@Geolim4)
      • Fixed #699 // Fatal type error with ssdb-server >1.9.7 (@dmz86)
      • Fixed #694 // Files driver rare bug (@Geolim4)
    • Helpers

      • Fixed #700 // Psr16Adapter::deleteMultiple/getMultiple converts $keys to an array (@bylexus)
      • Fixed #685 // Minor bug - fatal error in psr16 adapter if an exception is thrown (@MaximilianKresse)
    • Global

    • Misc

      • Updated "stale" policy (@geolim4)
      • Added Security Policy (@geolim4)
      • Fixed #695 // Typo in docs/examples/files.php (@hiroin)
    Source code(tar.gz)
    Source code(zip)
  • 6.1.4(Sep 15, 2019)

  • 7.0.5(Mar 3, 2019)

    "Rusted"

    • Drivers
      • Fixed #675 // Memcached ignores custom host/port configurations (@Geolim4)
    • Global
      • Fix composer package name should be all lowercase (@jfcherng)
    • Misc
      • Updated Mongodb\Config docs (@mikepsinn)
      • Fixed "Files" example in docs (@hriziya)
    Source code(tar.gz)
    Source code(zip)
  • 7.0.4(Dec 21, 2018)

    "Rust-in"

    • Core
      • Moved exclusive files-related configurations keys to IOConfigurationTrait (@Geolim4)
      • Added CacheManager::clearInstance() method (@Geolim4)
    • Drivers
      • Adds drivers options parameter when building Mongo DB client (@vainj)
    • Misc
      • Fixes PHPdoc issues (@vainj)
    Source code(tar.gz)
    Source code(zip)
  • 7.0.3(Sep 5, 2018)

    "Rust is part of beauty after all !"

    • Core
      • Fixed wrong copyright annotation in some file headers (@Geolim4)
      • Added PhpfastcacheDriverConnectException exception in case that a driver failed to connect (@Geolim4)
    • Drivers
      • Added missing option "timeout" for Predis oO (@Geolim4)
      • Settings up default Couchbase port to 8091 (@Geolim4)
      • Fixed #647 // Unwanted echo in exception (@Geolim4)
    • Misc
      • Fixed #637 // Corrupted badges on Github readme pages
    Source code(tar.gz)
    Source code(zip)
  • 7.0.2(Jul 23, 2018)

    "Rust is getting some gold !"

    • Core
      • Added more Opcache/Type hint optimizations (@Geolim4)
    • Drivers
      • Implemented #627 // Redis/Predis "prefix" option (@Geolim4)
      • Fixed bug in Apcu driver with abstract getStats() method (@afdaniele)
      • Added Mongodb cluster support and uri options (@UnRyongPark)
    • Misc
      • Updated readme as we are sure that Apc(u) is ported to php7 (@Geolim4)
      • Described clear() abstract method (@Geolim4)
      • Added new option to PULL_REQUEST_TEMPLATE.md (@Geolim4)
      • Fixed #620 // migration guide for v7 uses CamelCase in example (@Geolim4)
    Source code(tar.gz)
    Source code(zip)
  • 7.0.1(Jun 22, 2018)

    "Gold is getting some rust !"

    • Global
      • Updated php constraint to be more reliable over the years (@Geolim4)
    • Core
      • Fixed possible notice in some contexts (@Geolim4)
    • Drivers
      • IOException in Files driver: Preventive hotfix for #614, thanks to @hriziya (@Geolim4)
    • Misc
      • Fixed typo in README & code sample mistakes (@Geolim4)
      • Updated examples as per #612 (@Geolim4)
      • Fixed wrong code in template issues (@Geolim4)
      • Updated Github bytes (@Geolim4)
      • Fixing broken badges (@Geolim4)
    Source code(tar.gz)
    Source code(zip)
  • 6.1.3(Jun 8, 2018)

    • Global
      • Added "ext-couchbase" suggestion
      • Fixed Datetime type hints in ItemExtendedTrait
      • Fixed Datetime type hints in ItemBaseTrait
    • Core
      • Updated ExtendedCacheItemPoolTrait::deregisterItem() to now only accept string as parameter
    • Drivers
      • Preventive hotfix for #614 // Files driver randomly throwing exception
      • Cleaned up the Mongodb driver
      • Fixed Mongodb clear() method
    • Tests
      • Fixed randomly failing test Github-#560
      • Added Mongodb test since travis now supports it
    • Misc
      • Fixed broken link due to renamed "final" branch
      • Updated README to warn users about v7 compatibility
      • Removed mongodb extension from ini
    Source code(tar.gz)
    Source code(zip)
Owner
PHPSocialNetwork
Worldwide !
PHPSocialNetwork
A thin PSR-6 cache wrapper with a generic interface to various caching backends emphasising cache tagging and indexing.

Apix Cache, cache-tagging for PHP Apix Cache is a generic and thin cache wrapper with a PSR-6 interface to various caching backends and emphasising ca

Apix 111 Nov 26, 2022
Zend Framework cache backend for MongoDB

Zend_Cache_Backend_Mongo Author: Anton Stöckl About Zend_Cache_Backend_Mongo is a Zend Framework Cache Backend for MongoDB. It supports tags and autoc

Anton Stöckl 12 Feb 19, 2020
A simple cache library. Implements different adapters that you can use and change easily by a manager or similar.

Desarolla2 Cache A simple cache library, implementing the PSR-16 standard using immutable objects. Caching is typically used throughout an applicatito

Daniel González 129 Nov 20, 2022
A simple cache library. Implements different adapters that you can use and change easily by a manager or similar.

Desarolla2 Cache A simple cache library, implementing the PSR-16 standard using immutable objects. Caching is typically used throughout an applicatito

Daniel González 129 Nov 20, 2022
This plugin integrates cache functionality into Guzzle Bundle, a bundle for building RESTful web service clients.

Guzzle Bundle Cache Plugin This plugin integrates cache functionality into Guzzle Bundle, a bundle for building RESTful web service clients. Requireme

Vlad Gregurco 11 Sep 17, 2022
The place to keep your cache.

Stash - A PHP Caching Library Stash makes it easy to speed up your code by caching the results of expensive functions or code. Certain actions, like d

Tedious Developments 944 Jan 4, 2023
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.

Donate/Support: Documentation: https://www.scrapbook.cash - API reference: https://docs.scrapbook.cash Table of contents Installation & usage Adapters

Matthias Mullie 295 Nov 28, 2022
Cache slam defense using a semaphore to prevent dogpile effect.

metaphore PHP cache slam defense using a semaphore to prevent dogpile effect (aka clobbering updates, stampending herd or Slashdot effect). Problem: t

Przemek Sobstel 102 Sep 28, 2022
:zap: Simple Cache Abstraction Layer for PHP

⚡ 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

Lars Moelleken 27 Dec 8, 2022
Doctrine Cache component

Doctrine Cache Cache component extracted from the Doctrine Common project. Documentation This library is deprecated and will no longer receive bug fix

Doctrine 7.6k Jan 3, 2023
LRU Cache implementation in PHP

PHP LRU Cache implementation Intro WTF is a LRU Cache? LRU stands for Least Recently Used. It's a type of cache that usually has a fixed capacity and

Rogério Vicente 61 Jun 23, 2022
Simple cache abstraction layer implementing PSR-16

sabre/cache This repository is a simple abstraction layer for key-value caches. It implements PSR-16. If you need a super-simple way to support PSR-16

sabre.io 48 Sep 9, 2022
PSR-6 cache implementation adapting a given PSR-16 instance

PSR-6 cache implementation adapting PSR-16 This package provides a PSR-6 cache instance when you only have a PSR-16 cache at hand. As PSR-6 is more fe

null 1 Oct 15, 2021
More Than Just a Cache: Redis Data Structures

More Than Just a Cache: Redis Data Structures Redis is a popular key-value store, commonly used as a cache or message broker service. However, it can

Andy Snell 2 Oct 16, 2021
Simple cache

Simple cache

Róbert Kelčák 3 Dec 17, 2022
Elephant - a highly performant PHP Cache Driver for Kirby 3

?? Kirby3 PHP Cache-Driver Elephant - a highly performant PHP Cache Driver for Kirby 3 Commerical Usage Support open source! This plugin is free but i

Bruno Meilick 11 Apr 6, 2022
An improved helper for working with cache

Laravel Cache Installation To get the latest version of Laravel Cache, simply require the project using Composer: $ composer require dragon-code/larav

The Dragon Code 64 Sep 23, 2022
PHP local cache

__ ____ _________ ______/ /_ ___ / __ \/ ___/ __ `/ ___/ __ \/ _ \ / /_/ / /__/ /_/ / /__/ / / / __/ / ._

Jayden Lie 48 Sep 9, 2022
A fast, lock-free, shared memory user data cache for PHP

Yac is a shared and lockless memory user data cache for PHP.

Xinchen Hui 815 Dec 18, 2022