RedisSentinelConnectionState(
options: dict[str, Any] | None = None,
*,
sentinels: Sequence[tuple[str, int]],
master_name: str,
sentinel_kwargs: Mapping[str, Any] | None = None,
)
Bases: RedisConnectionState
Builds the client via Sentinel.master_for for HA / failover.
The underlying SentinelConnectionPool re-discovers the current master on every reconnect, so publishers and stream consumers fail over for free (both go through connection.client).
Source code in faststream/redis/configs/state.py
| def __init__(
self,
options: dict[str, Any] | None = None,
*,
sentinels: Sequence[tuple[str, int]],
master_name: str,
sentinel_kwargs: Mapping[str, Any] | None = None,
) -> None:
super().__init__(options)
self._sentinels = list(sentinels)
self._master_name = master_name
self._sentinel_kwargs = sentinel_kwargs
|
connect async
connect() -> Redis[bytes]
Source code in faststream/redis/configs/state.py
| async def connect(self) -> "Redis[bytes]":
# ``host``/``port`` describe a single node and are meaningless for
# Sentinel — the master address is discovered from the sentinels.
connection_kwargs = {
k: v for k, v in self._options.items() if k not in {"host", "port"}
}
connection_kwargs["lib_name"] = "faststream"
connection_kwargs["lib_version"] = __version__
manager = Sentinel(
self._sentinels,
sentinel_kwargs=dict(self._sentinel_kwargs)
if self._sentinel_kwargs is not None
else None,
**connection_kwargs,
)
client: Redis[bytes] = manager.master_for(self._master_name)
self._client = client
self._connected = True
return client
|
disconnect async
Source code in faststream/redis/configs/state.py
| async def disconnect(self) -> None:
if self._client:
await self._client.aclose() # type: ignore[attr-defined]
self._client = None
self._connected = False
|