henzeb / laravel-cache-index
Flexible replacement for tags
Installs: 3 068
Dependents: 0
Suggesters: 0
Security: 0
Stars: 7
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^8.1
- henzeb/var-export-wrapper: ^1.1
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- nesbot/carbon: v2.72.2
- nunomaduro/larastan: ^1|^2.3
- orchestra/testbench: ^8.0|^9.0
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9.6.3|^10.0
README
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.