Skip to content

llegaz/RedisCache

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Redis Cache

This project is build upon my first redis open PHP project Redis Adapter. Thanks to it you can use either Predis client or native PHP Redis client in a transparent way.

If PHP redis is installed

$ apt-get install php8.x-redis

These implementations will use it or fallback on Predis client otherwise.

Install

composer require llegaz/redis-cache
composer install

PSR-6

PSR-6 implementation is my implementation of Caching Interface from the PHP FIG www.php-fig.org/psr/psr-6 It is far from perfect and as of now (first versions of this implementation) you should be aware that pool expiration are available but by pool's fields expiration are not really ! I will try to test and implement a pool key expiration for Valkey.io in a near future but my first draft is: if you expire a pool key it will expire your entire pool SO BE EXTRA CAUTIOUS WITH THAT !

Caution

if you expire a pool key it will expire your entire pool SO BE EXTRA CAUTIOUS WITH THAT !

Basic usage

$cache = new LLegaz\Cache\RedisEnhancedCache();
$cart = new \LLegaz\Cache\Pool\CacheEntryPool($cache);
$user = new \LLegaz\Cache\Pool\CacheEntryPool($cache, 'lolo');

$id = $user->getItem('id');
if ($id->isHit()) {
    $item = $cart->getItem('banana:' . $id->get());
    $item->set('mixed value');
    $cart->save($item);
} else {
    $id->set('the lolo id');
    $user->save($id);
}

Batch

foreach ($cart as $item) {
    $cart->saveDeferred($item); // items are commited on pool object destruct
}

PSR-16

My Simple Cache implementation PHP FIG PSR-16 www.php-fig.org/psr/psr-16

    $cache = new LLegaz\Cache\RedisCache();
    $cache->selectDatabase(3); // switch database
    $cache->set('key', 'mixed value, could be an object or an array');
    $cache->get('key'));


    $cache->setMultiple(['key1' => [], 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3', 'key4' => 'value4'], 90); // 1m30s expiration on each key
    if ($cache->has('key1') && $cache->has('key4')) {
        $array = $cache->getMultiple(['key1', 'key1', 'key4']));
        var_dump(count($array)); // int(2)
        var_dump($array); // array(2) { ["key1"]=> string(6) "value1" ["key4"]=> string(6) "value4" }
    }

Configuration

$cache = new LLegaz\Cache\RedisCache();

is equivalent to

$cache = new LLegaz\Cache\RedisCache('127.0.0.1');

or

$cache = new LLegaz\Cache\RedisCache('localhost', 6379, null, 'tcp', 0, false); // the nulled field is the Redis password in clear text (here no pwd)

Persistent connection

$cache = new LLegaz\Cache\RedisCache('localhost', 6379, null, 'tcp', 0, true);

Contributing

You're welcome to propose things. I am open to criticism as long as it remains benevolent.

Stay tuned, by following me on github, for new features using predis and PHP Redis.


@see you space cowboy

About

PSR-6 and PSR-16 implementation

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages