Redix.pipeline
pipeline
, go back to Redix module for more information.
Specs
pipeline(connection(), [command()], keyword()) :: {:ok, [Redix.Protocol.redis_value()]} | {:error, atom() | Redix.Error.t() | Redix.ConnectionError.t()}
Issues a pipeline of commands on the Redis server.
commands
must be a list of commands, where each command is a list of strings
making up the command and its arguments. The commands will be sent as a single
"block" to Redis, and a list of ordered responses (one for each command) will
be returned.
The return value is {:ok, results}
if the request is successful, {:error, reason}
otherwise.
Note that {:ok, results}
is returned even if results
contains one or more
Redis errors (Redix.Error
structs). This is done to avoid having to walk the
list of results (a O(n)
operation) to look for errors, leaving the
responsibility to the user. That said, errors other than Redis errors (like
network errors) always cause the return value to be {:error, reason}
.
If commands
is an empty list ([]
) or any of the commands in commands
is
an empty command ([]
) then an ArgumentError
exception is raised right
away.
Pipelining is not the same as a transaction. For more information, see the module documentation.
Options
:timeout
- (integer or:infinity
) request timeout (in milliseconds). Defaults to5000
. If the Redis server doesn't reply within this timeout,{:error, %Redix.ConnectionError{reason: :timeout}}
is returned.
Examples
iex> Redix.pipeline(conn, [["INCR", "mykey"], ["INCR", "mykey"], ["DECR", "mykey"]])
{:ok, [1, 2, 1]}
iex> Redix.pipeline(conn, [["SET", "k", "foo"], ["INCR", "k"], ["GET", "k"]])
{:ok, ["OK", %Redix.Error{message: "ERR value is not an integer or out of range"}, "foo"]}
If Redis goes down (before a reconnection happens):
iex> {:error, error} = Redix.pipeline(conn, [["SET", "mykey", "foo"], ["GET", "mykey"]])
iex> error.reason
:closed