redis/redis-py · error · NotImplementedError

HELLO is intentionally not implemented in the client.

Error message

HELLO is intentionally not implemented in the client.

What it means

hello is a stub that always raises NotImplementedError. The HELLO command negotiates the RESP protocol version and authentication; redis-py handles protocol negotiation internally (via the protocol parameter on the client/connection) rather than exposing a raw HELLO method, so calling it manually would conflict with the client's own handshake.

Source

Thrown at redis/commands/core.py:2292

    ) -> list[int] | Awaitable[list[int]]:
        """
        This command blocks the current client until all previous write
        commands by that client are acknowledged as having been fsynced
        to the AOF of the local Redis and/or at least the specified number
        of replicas.

        For more information, see https://redis.io/commands/waitaof
        """
        return self.execute_command(
            "WAITAOF", num_local, num_replicas, timeout, **kwargs
        )

    def hello(self):
        """
        This function throws a NotImplementedError since it is intentionally
        not supported.
        """
        raise NotImplementedError(
            "HELLO is intentionally not implemented in the client."
        )

    def failover(self):
        """
        This function throws a NotImplementedError since it is intentionally
        not supported.
        """
        raise NotImplementedError(
            "FAILOVER is intentionally not implemented in the client."
        )

    @overload
    def hotkeys_start(
        self: SyncClientProtocol,
        metrics: List[HotkeysMetricsTypes],
        count: int | None = None,
        duration: int | None = None,

View on GitHub (pinned to da03cdc7e8)

Solutions

  1. Set protocol=3 or protocol=2 on the Redis() client/connection constructor to negotiate at connect time.
  2. Set password/username on the client for authentication instead of HELLO AUTH.
  3. Use r.execute_command('HELLO', proto) only if you understand the handshake implications.

Example fix

# before
r.hello()
# after
import redis
r = redis.Redis(host='localhost', protocol=3)  # negotiate RESP3 at connect time
Defensive patterns

Strategy: validation

Validate before calling

# do not call hello(); configure protocol at construction time
import redis
r = redis.Redis(protocol=3, username=..., password=...)

Prevention

When it happens

Trigger: Calling r.hello() directly. Auto-generated command wrappers invoking every method. Copying redis-cli HELLO usage into Python.

Common situations: Developer wants to switch protocol versions at runtime. Migrating from another client that exposed HELLO. Testing RESP3 negotiation manually.

Related errors


AI-assisted analysis of redis/redis-py@da03cdc7e8 (2026-08-04). Data as JSON: /data/errors/f71f65d12e0f57e4.json. Report an issue: GitHub.