talleu / php-redis-om
A PHP object mapper library for Redis
Installs: 2 492
Dependents: 0
Suggesters: 0
Security: 0
Stars: 182
Watchers: 5
Forks: 10
Open Issues: 17
Requires
- php: >=8.2
- ext-json: *
Requires (Dev)
- api-platform/core: ^4.1
- friendsofphp/php-cs-fixer: ^3.57
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^11.0
- symfony/browser-kit: ^7.2
- symfony/framework-bundle: ^7.2
- symfony/http-client: ^7.2
- symfony/var-dumper: ^7.0
Suggests
- ext-redis: To use the php extension for Redis (phpredis)
- predis/predis: To use Predis as a Redis PHP client
- dev-main
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3
- v0.2.8
- v0.2.7
- v0.2.6
- v0.2.5
- v0.2.4
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.9
- v0.1.8
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- dev-chore/support_api_p
- dev-chore/fix_expire_doc
- dev-chore/suggest_sf_framework
- dev-chore/get_expiration_time
- dev-chore/php_8_4_support
- dev-feat/add_phpdoc
This package is auto-updated.
Last update: 2025-04-08 18:07:42 UTC
README
php-redis-om 🗄️
A PHP object mapper for Redis.
An Object Mapper for Redis®, designed to providing an intuitive and familiar interface for PHP developers to interact with Redis.
Features 🛠️
- Doctrine-like methods and architecture
- Symfony bundle integration
- Easy integration with existing PHP applications
- High performance and scalability with Redis®
- Support for Redis JSON module
- Automatic schema generation
- Search and query capabilities
- Auto-expiration of your objects
- API Platform support (beta)
Requirements ⚙️
- PHP 8.2 or higher
- Redis 4.0 or higher
- Redisearch module (available by default with Redis >8) (installation)
- php-redis extension OR Predis library
- Redis JSON module (optional)
- Composer
Supported types ✅
- scalar (string, int, float, bool, double)
- timestamp
- json
- null
- DateTimeImmutable
- DateTime
- array and nested arrays
- object and nested objects
- stdClass
Installation 📝
Install the library via Composer:
composer require talleu/php-redis-om
Depending on your configuration, use phpredis or Predis
Symfony bundle 🎵
In a Symfony application, you may need to add this line to config/bundles.php
Talleu\RedisOm\Bundle\TalleuRedisOmBundle::class => ['all' => true],
And that's it, your installation is complete ! 🚀
API Platform support 🕷️
For API Platform users, a basic implementation is provided here: API Platfom X Redis
Basic Usage 🎯
Add the RedisOm attribute to your class to map it to a Redis schema:
<?php use Talleu\RedisOm\Om\Mapping as RedisOm; #[RedisOm\Entity] class User { #[RedisOm\Id] #[RedisOm\Property] public int $id; #[RedisOm\Property(index:true)] public string $name; #[RedisOm\Property] public \DateTimeImmutable $createdAt; }
After add the RedisOm attribute to your class,
you have to run the following command to create the Redis schema for your classes (default path is ./src
):
For Symfony users:
bin/console redis-om:migrate
For others PHP applications:
vendor/bin/redisMigration <YOUR DIRECTORY PATH>
Then you can use the ObjectManager to persist your objects from Redis ! 💪
For Symfony users, just inject the RedisObjectManagerInterface in the constructor:
<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Talleu\RedisOm\Om\RedisObjectManagerInterface; use App\Entity\Book; class MySymfonyController extends AbstractController { public function __construct(private RedisObjectManagerInterface $redisObjectManager) {} #[Route('/', name: 'app_home')] public function index(): Response { $book = new Book(); $book->name = 'Martin Eden'; $this->redisObjectManager->persist($book); $this->redisObjectManager->flush(); //.. } }
For others PHP applications:
<?php use Talleu\RedisOm\Om\RedisObjectManager; $user = new User() $user->id = 1; $user->name = 'John Doe'; // Persist the object in redis $objectManager = new RedisObjectManager(); $objectManager->persist($user); $objectManager->flush();
🥳 Congratulations, your PHP object is now registered in Redis !
You can now retrieve your user wherever you like using the repository provided by the Object Manager (or the object manager directly):
// Retrieve the object from redis $user = $this->redisObjectManager->find(User::class, 1); $user = $this->redisObjectManager->getRepository(User::class)->find(1); $user = $this->redisObjectManager->getRepository(User::class)->findOneBy(['name' => 'John Doe']); // Retrieve a collection of objects $users = $this->redisObjectManager->getRepository(User::class)->findAll(); $users = $this->redisObjectManager->getRepository(User::class)->findBy(['name' => 'John Doe'], ['createdAt' => 'DESC'], 10);