fhteam / laravel-cache-redis-extended
Redis cache driver with extended capabilities
v0.0.1
2015-03-13 08:23 UTC
Requires
- php: >=5.5.0
- predis/predis: ~1.0
Requires (Dev)
- laravel/framework: >=4.0.0
- orchestra/testbench: 3.0.4
- phpunit/phpunit: 4.3.*
- squizlabs/php_codesniffer: 1.*
This package is not auto-updated.
Last update: 2024-11-23 16:50:45 UTC
README
This project is currently under development. Code most probably is broken. Please wait until 1.0 is released to use it in production.
Features:
- All
Cache
facade methods extended to accept arrays as keys to utilize Redis MULTI operations (multi-get, -set, -forget etc.) - Redis optimized commands used where appropriate (
EXISTS
inhas()
,SET...NX
inadd()
etc) - ❗ No need to do
Cache::tags(...)
when reading data.Cache::get()
is enough. So you can now query cache without even knowing which tags are associated with some cache item - Tag operations optimized: there will be no second Redis query when doing
Cache::tags()
with the same tag set - Serialization support:
- Built-in ability to serialize and deserialize Laravel models with all attributes and relations as a single cache item (Laravel cannot cache models, only queries upon which models are constructed. Each relation in Laravel currently is a separate query and thus a separate cache item)
- Ability to add new serializers / deserializers for custom object types
Architecture
Core <===> Serialization <===> Encoding
| |
|----> TagVersionStorage <------|
+ Utility +
- Core contains mostly Redis command implementations
- Serialization handles packing and unpacking cache items into a structure, suitable to be placed into a cache
(encoded item value, expiration data, item tags with their versions). Serialization relies on Coders to convert objects into
something easily serializable.
- Coders contain low-level serialization routes. They receive data (objects or whatever) and emit something, that
can be passed to PHP's
serialize()
in order to get encoded object's representation. Every coder must implementCoderInterface
- Coders contain low-level serialization routes. They receive data (objects or whatever) and emit something, that
can be passed to PHP's
- TagVersionStorage is a per-Redis-connection singleton, that manages tag versions: fetches actual tag versions,
compares them, flushes them etc. All tag storage handlers should implement
TagVersionStorageInterface
.PlainTagVersionStorage
is a basic version of tag version storage that doesn't share any information about tag versions outside current PHP process. You can implement a version, that will store actual tag versions, for example, in APC if querying Redis becomes expensive or just needs to be avoided.
- Utility contains some low-level specific tools which are not subsystem related.
RedisConnectionTrait
- is a trait, that allows to reuse the same scheme of Redis connection handling across the projectArr
contains some low-level array routinesTime
contains some time management routines
Contribute
- Code style - Symfony 2
- Use type hinting where possible
- Use phpdoc annotations where possible
- Prefer language constructs to strings (for example, use
MyClass::class
, not'MyClass'
where class name is needed)