flownative / redis-sentinel
支持Sentinel的Flow Redis缓存后端
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
支持Sentinel的Flow Redis缓存后端
此包提供支持Sentinel的Redis缓存后端。
安装
该包通过Composer以常规Flow包的形式安装。对于您现有的项目,只需将flownative/redis-sentinel
添加到Flow或Neos分布的依赖项中即可。
$ composer require flownative/redis-sentinel
用法
此包中包含的RedisBackend
可以用作neos/cache包提供的Redis后端的直接替换。
对于与独立Redis服务器一起的常规使用,在您的Caches.yaml
中提供如下配置
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 …
当然,您也可以使用具体值而不是环境变量。
请注意,您可以为两个不同的超时设置值
- "timeout"(默认:5)指定连接到Redis时等待的秒数
- "readWriteTimeout"(默认:1)指定读写操作期间等待的时间
您可以将浮点数指定为超时值。例如,使用0.5
将超时设置为半秒。
当Redis与Sentinel服务器一起在高可用性设置中运行时,您需要配置Redis Backend以访问Sentinel服务器而不是实际的Redis节点。
根据您的设置,这看起来可能如下所示
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 …
请注意,“service”是您的Redis集群名称(在大多数默认配置中是“mymaster”)。
此包将为所有连接使用相同的密码,目前不支持为Sentinel和客户端服务器指定不同的密码。
日志记录
此缓存后端将记录错误,例如连接超时或其他与Redis服务器通信时的问题。
如果在请求期间发生连接错误,很可能会发生更多相同类型的错误。因此,默认情况下,这些消息将去重:如果错误消息与当前CLI/web请求期间已记录的消息相同,则不会再次记录。
您可以通过将相应的后端选项设置为false来禁用去重记录的错误,以进行调试。
Flow_Mvc_Routing_Route: backend: 'Flownative\RedisSentinel\RedisBackend' backendOptions: database: 0 … deduplicateErrors: false
如果您不想记录错误(例如,因为您通过MultiBackend记录错误),您可以关闭此缓存后端的日志记录。
Flow_Mvc_Routing_Route: backend: 'Flownative\RedisSentinel\RedisBackend' backendOptions: database: 0 … logErrors: false
命令行工具
此包提供CLI命令,可以帮助调试配置或连接问题。
redissentinel:list
显示Redis Sentinel缓存后端的配置,包括定义为Multi Backend子后端的后端。
redissentinel:connect
尝试与指定的缓存连接。如果缓存使用Multi Backend,则此命令将跳过Multi Backend行为,并直接实例化Redis Sentinel Backend。如果可能,将显示并解释错误。
测试
您可以使用环境变量REDIS_HOST
、REDIS_PORT
和REDIS_PASSWORD
调整功能测试中使用的宿主、端口和密码。
致谢
此缓存后端由Flownative的Robert Lemke开发,基于Neos Flow Redis Backend,最初由Christopher Hlubek创建,后来由Neos核心团队改进。