Redis
Starting with Shopware v6.6.8.0, Redis support has been improved, giving you more flexibility in how you use it in your projects and plugins.
Accessing Redis connections
Once you've set up your Redis connections as explained in the Redis configuration guide, you can access them in your code using the following methods:
Inject
Shopware\Core\Framework\Adapter\Redis\RedisConnectionProvider
and retrieve connections by name:xml<service id="MyCustomService"> <argument type="service" id="Shopware\Core\Framework\Adapter\Redis\RedisConnectionProvider" /> <argument>%myservice.redis_connection_name%</argument> </service>
phpclass MyCustomService { public function __construct ( private RedisConnectionProvider $redisConnectionProvider, string $connectionName, ) { } public function doSomething() { if ($this->redisConnectionProvider->hasConnection($this->connectionName)) { $connection = $this->redisConnectionProvider->getConnection($this->connectionName); // use connection } } }
Use
Shopware\Core\Framework\Adapter\Redis\RedisConnectionProvider
as factory to define custom services:xml<service id="my.custom.redis_connection" class="Redis"> <factory service="Shopware\Core\Framework\Adapter\Redis\RedisConnectionProvider" method="getConnection" /> <argument>%myservice.redis_connection_name%</argument> </service> <service id="MyCustomService"> <argument type="service" id="my.custom.redis_connection" /> </service>
phpclass MyCustomService { public function __construct ( private object $redisConnection, ) { } public function doSomething() { // use connection } }
This approach is especially useful when you want multiple services to share the same Redis connection.
Inject connection directly by name:
xml<service id="MyCustomService"> <argument type="service" id="shopware.redis.connection.connection_name" /> </service>
Be cautious with this approach! If you change the Redis connection names in your configuration, it will cause container build errors.
Redis usage tips
Connection types
Under the hood, connection service objects are created using the \Symfony\Component\Cache\Adapter\RedisAdapter::createConnection
method. Depending on the installed extensions/libraries and the provided DSN, this method may return instance of one of the following classes: \Redis|Relay|\RedisArray|\RedisCluster|\Predis\ClientInterface
Reusing connections
Connections are cached in a static variable and reused based on the provided DSN. If you use the same DSN for multiple connections, they will share the same connection object. This means you need to be cautious when closing or modifying connection options, as it will affect all services using the same connection.
Connection initialization
The moment actual connection is established depends on the usage model:
- When
RedisConnectionProvider::getConnection
is called. - When the Redis connection service is requested from the container.
- When a service that depends on Redis connection is instantiated.
Redis is optional
When developing a plugin, please keep in mind that Redis is an optional dependency in Shopware and might not be available in all installations.