pub struct Pipeline {
// some fields omitted
}
Represents a redis command pipeline.
Methods
A pipeline allows you to send multiple commands in one go to the
redis server. API wise it's very similar to just using a command
but it allows multiple commands to be chained and some features such
as iteration are not available.
Basic example:
let ((k1, k2),) : ((i32, i32),) = redis::pipe()
.cmd("SET").arg("key_1").arg(42).ignore()
.cmd("SET").arg("key_2").arg(43).ignore()
.cmd("MGET").arg(&["key_1", "key_2"]).query(&con).unwrap();
As you can see with cmd
you can start a new command. By default
each command produces a value but for some you can ignore them by
calling ignore
on the command. That way it will be skipped in the
return value which is useful for SET
commands and others, which
do not have a useful return value.
Creates an empty pipeline. For consistency with the cmd
api a pipe
function is provided as alias.
fn cmd(&mut self, name: &str) -> &mut Pipeline
Starts a new command. Functions such as arg
then become
available to add more arguments to that command.
Adds a command to the pipeline.
Adds an argument to the last started command. This works similar
to the arg
method of the Cmd
object.
Note that this function fails the task if executed on an empty pipeline.
Instructs the pipeline to ignore the return value of this command.
It will still be ensured that it is not an error, but any successful
result is just thrown away. This makes result processing through
tuples much easier because you do not need to handle all the items
you do not care about.
Note that this function fails the task if executed on an empty pipeline.
This enables atomic mode. In atomic mode the whole pipeline is
enclosed in MULTI
/EXEC
. From the user's point of view nothing
changes however. This is easier than using MULTI
/EXEC
yourself
as the format does not change.
let (k1, k2) : (i32, i32) = redis::pipe()
.atomic()
.cmd("GET").arg("key_1")
.cmd("GET").arg("key_2").query(&con).unwrap();
Executes the pipeline and fetches the return values. Since most
pipelines return different types it's recommended to use tuple
matching to process the results:
let (k1, k2) : (i32, i32) = redis::pipe()
.cmd("SET").arg("key_1").arg(42).ignore()
.cmd("SET").arg("key_2").arg(43).ignore()
.cmd("GET").arg("key_1")
.cmd("GET").arg("key_2").query(&con).unwrap();
This is a shortcut to query()
that does not return a value and
will fail the task if the query of the pipeline fails.
This is equivalent to a call of query like this:
let _ : () = redis::pipe().cmd("PING").query(&con).unwrap();
Trait Implementations
fn get<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn set<'a, K: ToRedisArgs, V: ToRedisArgs>(&mut self, key: K, value: V) -> &mut Self
fn set_ex<'a, K: ToRedisArgs, V: ToRedisArgs>(&mut self, key: K, value: V, seconds: usize) -> &mut Self
fn set_nx<'a, K: ToRedisArgs, V: ToRedisArgs>(&mut self, key: K, value: V) -> &mut Self
fn getset<'a, K: ToRedisArgs, V: ToRedisArgs>(&mut self, key: K, value: V) -> &mut Self
fn del<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn exists<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn expire<'a, K: ToRedisArgs>(&mut self, key: K, seconds: usize) -> &mut Self
fn pexpire<'a, K: ToRedisArgs>(&mut self, key: K, ms: usize) -> &mut Self
fn persist<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn rename<'a, K: ToRedisArgs>(&mut self, key: K, new_key: K) -> &mut Self
fn rename_nx<'a, K: ToRedisArgs>(&mut self, key: K, new_key: K) -> &mut Self
fn append<'a, K: ToRedisArgs, V: ToRedisArgs>(&mut self, key: K, value: V) -> &mut Self
fn incr<'a, K: ToRedisArgs, V: ToRedisArgs>(&mut self, key: K, delta: V) -> &mut Self
fn setbit<'a, K: ToRedisArgs>(&mut self, key: K, offset: usize, value: bool) -> &mut Self
fn getbit<'a, K: ToRedisArgs>(&mut self, key: K, offset: usize) -> &mut Self
fn bitcount<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn bit_and<'a, K: ToRedisArgs>(&mut self, dstkey: K, srckeys: K) -> &mut Self
fn bit_or<'a, K: ToRedisArgs>(&mut self, dstkey: K, srckeys: K) -> &mut Self
fn bit_xor<'a, K: ToRedisArgs>(&mut self, dstkey: K, srckeys: K) -> &mut Self
fn bit_not<'a, K: ToRedisArgs>(&mut self, dstkey: K, srckey: K) -> &mut Self
fn strlen<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn hget<'a, K: ToRedisArgs, F: ToRedisArgs>(&mut self, key: K, field: F) -> &mut Self
fn hdel<'a, K: ToRedisArgs, F: ToRedisArgs>(&mut self, key: K, field: F) -> &mut Self
fn hexists<'a, K: ToRedisArgs, F: ToRedisArgs>(&mut self, key: K, field: F) -> &mut Self
fn hkeys<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn hvals<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn hgetall<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn hlen<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn blpop<'a, K: ToRedisArgs>(&mut self, key: K, timeout: usize) -> &mut Self
fn brpop<'a, K: ToRedisArgs>(&mut self, key: K, timeout: usize) -> &mut Self
fn brpoplpush<'a, K: ToRedisArgs>(&mut self, srckey: K, dstkey: K, timeout: usize) -> &mut Self
fn lindex<'a, K: ToRedisArgs>(&mut self, key: K, index: isize) -> &mut Self
fn llen<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn lpop<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn lpush<'a, K: ToRedisArgs, V: ToRedisArgs>(&mut self, key: K, value: V) -> &mut Self
fn lrange<'a, K: ToRedisArgs>(&mut self, key: K, start: isize, stop: isize) -> &mut Self
fn lrem<'a, K: ToRedisArgs, V: ToRedisArgs>(&mut self, key: K, count: isize, value: V) -> &mut Self
fn ltrim<'a, K: ToRedisArgs>(&mut self, key: K, start: isize, stop: isize) -> &mut Self
fn rpop<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn rpoplpush<'a, K: ToRedisArgs>(&mut self, key: K, dstkey: K) -> &mut Self
fn rpush<'a, K: ToRedisArgs, V: ToRedisArgs>(&mut self, key: K, value: V) -> &mut Self
fn sadd<'a, K: ToRedisArgs, M: ToRedisArgs>(&mut self, key: K, member: M) -> &mut Self
fn scard<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn sdiff<'a, K: ToRedisArgs>(&mut self, keys: K) -> &mut Self
fn sdiffstore<'a, K: ToRedisArgs>(&mut self, dstkey: K, keys: K) -> &mut Self
fn sinter<'a, K: ToRedisArgs>(&mut self, keys: K) -> &mut Self
fn sdinterstore<'a, K: ToRedisArgs>(&mut self, dstkey: K, keys: K) -> &mut Self
fn smembers<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn smove<'a, K: ToRedisArgs, M: ToRedisArgs>(&mut self, srckey: K, dstkey: K, member: M) -> &mut Self
fn spop<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn srem<'a, K: ToRedisArgs, M: ToRedisArgs>(&mut self, key: K, member: M) -> &mut Self
fn sunion<'a, K: ToRedisArgs>(&mut self, keys: K) -> &mut Self
fn sunionstore<'a, K: ToRedisArgs>(&mut self, dstkey: K, keys: K) -> &mut Self
fn zcard<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn zinterstore<'a, K: ToRedisArgs>(&mut self, dstkey: K, keys: &[K]) -> &mut Self
fn zlexcount<'a, K: ToRedisArgs, L: ToRedisArgs>(&mut self, key: K, min: L, max: L) -> &mut Self
fn zrange<'a, K: ToRedisArgs>(&mut self, key: K, start: isize, stop: isize) -> &mut Self
fn zrank<'a, K: ToRedisArgs, M: ToRedisArgs>(&mut self, key: K, member: M) -> &mut Self
fn zrem<'a, K: ToRedisArgs, M: ToRedisArgs>(&mut self, key: K, members: M) -> &mut Self
fn zrevrange<'a, K: ToRedisArgs>(&mut self, key: K, start: isize, stop: isize) -> &mut Self
fn zscore<'a, K: ToRedisArgs, M: ToRedisArgs>(&mut self, key: K, member: M) -> &mut Self
fn zunionstore<'a, K: ToRedisArgs>(&mut self, dstkey: K, keys: &[K]) -> &mut Self
fn pfadd<'a, K: ToRedisArgs, E: ToRedisArgs>(&mut self, key: K, element: E) -> &mut Self
fn pfcount<'a, K: ToRedisArgs>(&mut self, key: K) -> &mut Self
fn pfmerge<'a, K: ToRedisArgs>(&mut self, dstkey: K, srckeys: K) -> &mut Self