Redis

    The Redis project offers a thorough reference on partitioning as it relates to Redis. See “”.

    Features of Envoy Redis:

    • Redis protocol codec.
    • Ketama distribution.
    • Detailed command statistics.
    • Active and passive healthchecking.

    Planned future enhancements:

    • Additional timing stats.
    • Request collapsing for fragmented commands.
    • Replication.
    • Built-in retry.
    • Tracing.

    For filter configuration details, see the Redis proxy filter .

    If active healthchecking is desired, the cluster should be configured with a Redis healthcheck.

    If passive healthchecking is desired, also configure .

    For the purposes of passive healthchecking, connect timeouts, command timeouts, and connection close map to 5xx. All other responses from Redis are counted as a success.

    At the protocol level, pipelines are supported. MULTI (transaction block) is not. Use pipelining wherever possible for the best performance.

    For details on each command’s usage see the official Redis command reference.

    If Redis throws an error, we pass that error along as the response to the command. Envoy treats a response from Redis with the error datatype as a normal response and passes it through to the caller.

    Envoy can also generate its own errors in response to the client.

    ErrorMeaning
    no upstream hostThe ring hash load balancer did not have a healthy host available at the ring position chosen for the key.
    upstream failureThe backend did not respond within the timeout period or closed the connection.
    invalid requestCommand was rejected by the first stage of the command splitter due to datatype or length.
    unsupported commandThe command was not recognized by Envoy and therefore cannot be serviced because it cannot be hashed to a backend server.
    finished with n errorsFragmented commands which sum the response (e.g. DEL) will return the total number of errors received if any were received.
    upstream protocol errorA fragmented command received an unexpected datatype or a backend responded with a response that not conform to the Redis protocol.
    wrong number of arguments for commandCertain commands check in Envoy that the number of arguments is correct.

    In the case of MGET, each individual key that cannot be fetched will generate an error response. For example, if we fetch five keys and two of the keys’ backends time out, we would get an error response for each in place of the value.