flownative / redis-sentinel
Flow Redis cache backend with Sentinel support
Fund package maintenance!
robertlemke
Installs: 18 758
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 5
Forks: 3
Open Issues: 1
Type:neos-package
Requires
- php: 8.1.* || 8.2.* || 8.3.*
- ext-zlib: *
- neos/cache: ^7.0 || ^8.0 || ^9.0
- neos/flow: ^7.0 || ^8.0 || ^9.0
- predis/predis: ^2.0
Requires (Dev)
- mikey179/vfsstream: ~1.6
- phpunit/phpunit: ^8.5.29 || ^9.5
README
Flow Redis Cache Backend with Sentinel Support
This package provides a Redis cache backend with Sentinel support.
Installation
The package is installed as a regular Flow package via Composer. For your
existing project, simply include flownative/redis-sentinel
into the
dependencies of your Flow or Neos distribution:
$ composer require flownative/redis-sentinel
Usage
The RedisBackend
contained in this package can be used as a
drop-in-replacement for the Redis backend provided by the neos/cache package.
For regular use with a standalone Redis server, provide configuration in your
Caches.yaml
like so:
Flow_Mvc_Routing_Route: backend: 'Flownative\RedisSentinel\RedisBackend' backendOptions: &redisBackendOptions hostname: '%env:REDIS_HOST%' password: '%env:REDIS_PASSWORD%' port: '%env:REDIS_PORT%' database: 0 timeout: 5 readWriteTimeout: 0.5 Flow_Mvc_Routing_Resolve: backend: 'Flownative\RedisSentinel\RedisBackend' backendOptions: *redisBackendOptions …
Of course you can also set concrete values instead of using environment variables.
Note that you can set two different timeouts:
- "timeout" (default: 5) specifies the time in seconds to wait while connecting to Redis
- "readWriteTimeout" (default: 1) specifies the time to wait during a read or write operation
You can specify float numbers as timeout values. For example, use 0.5
for
setting the timeout to half a second.
When Redis is running in a high availability setup with Sentinel servers, you need to configure the Redis Backend to access the Sentinel servers instead of the actual Redis nodes.
Depending on your setup, this may look like the following:
Flow_Mvc_Routing_Route: backend: 'Flownative\RedisSentinel\RedisBackend' backendOptions: &backendOptions sentinels: - 'redis://10.101.213.145:26379' - 'redis://10.101.213.146:26379' - 'redis://10.101.213.147:26379' service: 'mymaster' password: 'a-very-long-password' database: 0 timeout: 0.5 readWriteTimeout: 0.1 Flow_Mvc_Routing_Resolve: backend: 'Flownative\RedisSentinel\RedisBackend' backendOptions: *backendOptions …
Note that "service" is the name of your Redis cluster (which is "mymaster" in most default configurations).
This package will use the same password for all connections, there is currently no support for specifying different passwords for Sentinel and client servers.
Logging
This cache backend will log errors, such as connection timeouts or other problems while communicating with the Redis servers.
If a connection error occurs during a request, it is likely, that more errors of the same type will happen. Therefore, those messages will, by default, be de-duplicated: If the messages of an error is identical with one which already has been logged during the current CLI / web request, it will not be logged another time.
You can disable de-duplication logged errors for debugging purposes by setting the respective backend option to false:
Flow_Mvc_Routing_Route: backend: 'Flownative\RedisSentinel\RedisBackend' backendOptions: database: 0 … deduplicateErrors: false
If you don't want errors being logged – for example, because you log errors via the MultiBackend – you can turn off logging for this cache backend:
Flow_Mvc_Routing_Route: backend: 'Flownative\RedisSentinel\RedisBackend' backendOptions: database: 0 … logErrors: false
Command Line Tool
This package provides CLI commands which can help debugging configuration or connectivity issues.
redissentinel:list
Displays configuration of Redis Sentinel cache backends, including those backends which are defined as a sub-backend of a Multi Backend.
redissentinel:connect
Tries to connect with the specified cache. If the cache is using a Multi Backend, this command will skip the Multi Backend behavior and instantiate the Redis Sentinel Backend directly. Errors are display and explained, if possible.
Tests
You can adjust the host, port and password used in the functional tests
using the environment variables REDIS_HOST
, REDIS_PORT
and REDIS_PASSWORD
.
Credits
This cache backend was developed by Robert Lemke of Flownative, based on the Neos Flow Redis Backend, originally created by Christopher Hlubek and later improved by the Neos core team.