Skip to content

henzeb/laravel-cache-index

Repository files navigation

Cache Index for Laravel

Build Status Latest Version on Packagist Total Downloads Test Coverage License

When you have a situation where you need to be able to track keys, you can use tags. Unfortunately tags aren't supported by all drivers, and retrieving keys is only doable the hacky way with redis.

Cache Index for Laravel provides a driver-independent way for managing such indexes.

Installation

Just install with the following command.

composer require henzeb/laravel-cache-index

Usage

Under the hood, index returned an extended Illuminate\Cache\Repository object, which manages your index.

See Laravel doc's for the possible methods.

keys are prefixed with the index name, so that you can't accidentally overwrite any values belonging to that index.

Note: tags are currently not supported when using index.

Cache::index('myIndex')->add('test', 'my value');
Cache::index('myIndex')->put('put', 'my value');

Cache::driver('file')->index('myIndex')->remember('filed', 'my value in file');

Cache::index('myIndex')->get('put'); // returns 'my value'
Cache::get('put'); // returns null

Cache::index('myIndex')->flush(); // only flushes keys in index

index name

The index name can, next to a regular string, also be applied as an array. This is handy when you have an index based on variables.

Cache::index(['myIndex', 'Read', 'Write']); // uses index name `myIndex.Read.Write`
Cache::index(['myIndex', ActionEnum::Read]); // uses index name `myIndex.Read`
Cache::index(['myIndex', new StdClass()]); // uses index name `myIndex.StdClass`
Cache::index(['myIndex', new StringableClass('stringed')]); // uses index name `myIndex.stringed`

Keys

Retrieving a list of keys is very easy.

Cache::index('myIndex')->keys(); // returns ['test', 'put']
Cache::driver('file')->index('myIndex')->keys(); // returns ['filed']

Count

With this method, you can know how many keys are inside your index.

Cache::index('myIndex'); // using default driver
Cache::driver('file')->index('myIndex'); // using file driver

Copy & Move

Copy

Makes a copy of a cached item, and adds the key in the new index.

It returns true if it's successful, false otherwise.

Cache::index('myIndex')->copy('myKey', 'targetIndex');
Cache::index('myIndex')->copy('myKey', 'targetIndex', 10);

Move

Does the same as Copy, except that it removes its own copy.

It returns true if it's successful, false otherwise.

Cache::index('myIndex')->move('myKey', 'targetIndex');
Cache::index('myIndex')->move('myKey', 'targetIndex', 10);

Note: Be aware that either copy and move do nothing with the TTL. It creates a new copy of the cached item with a new TTL if given.

pop

Just like with arrays, takes and removes the last indexed key and returns the value associated with that index.

shift

Just like with arrays, takes and removes the first indexed key and returns the value associated with that index.

random

returns a random value.

randomKey

returns a random key.

pullRandom

Returns a random value and pulls it from the cache.

syncTtl

Allows you to synchronize the ttl between indexed keys.

Cache::index('myIndex')->syncTtl(10);
Cache::index('myIndex')->syncTtl(now()->addSeconds(10));

Testing this package

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email henzeberkheij@gmail.com instead of using the issue tracker.

Credits

License

The GNU AGPLv. Please see License File for more information.