Skip to content

Commit 08ab5da

Browse files
committedOct 14, 2014
Added many sorted set commands.
1 parent bb8a8e4 commit 08ab5da

File tree

2 files changed

+146
-26
lines changed

2 files changed

+146
-26
lines changed
 

‎src/redis/commands.rs

+146-17
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,6 @@ use connection::{Connection, ConnectionLike};
44
use cmd::{cmd, Cmd, Pipeline, Iter};
55

66

7-
/// Mode for the bit operation on commands.
8-
#[deriving(PartialEq, Eq, Clone, Show)]
9-
pub enum BitOp {
10-
BitAnd,
11-
BitOr,
12-
BitXor,
13-
BitNot,
14-
}
15-
167
macro_rules! implement_commands {
178
(
189
$(
@@ -84,6 +75,17 @@ macro_rules! implement_commands {
8475
(&self, key: K, pattern: P) -> RedisResult<Iter<RV>> {
8576
cmd("SSCAN").arg(key).cursor_arg(0).arg("MATCH").arg(pattern).iter(self)
8677
}
78+
79+
/// Incrementally iterate sorted set elements.
80+
fn zscan<K: ToRedisArgs, RV: FromRedisValue>(&self, key: K) -> RedisResult<Iter<RV>> {
81+
cmd("ZSCAN").arg(key).cursor_arg(0).iter(self)
82+
}
83+
84+
/// Incrementally iterate sorted set elements for elements matching a pattern.
85+
fn zscan_match<K: ToRedisArgs, P: ToRedisArgs, RV: FromRedisValue>
86+
(&self, key: K, pattern: P) -> RedisResult<Iter<RV>> {
87+
cmd("ZSCAN").arg(key).cursor_arg(0).arg("MATCH").arg(pattern).iter(self)
88+
}
8789
}
8890

8991
/// Implements common redis commands for pipelines. Unlike the regular
@@ -223,15 +225,28 @@ implement_commands!(
223225
cmd("BITCOUNT").arg(key).arg(start).arg(end)
224226
}
225227

226-
#[doc="Perform a bitwise operation between multiple keys (containing string values)
228+
#[doc="Perform a bitwise AND between multiple keys (containing string values)
227229
and store the result in the destination key."]
228-
fn bitop<K: ToRedisArgs>(op: BitOp, dstkey: K, srckeys: K) {
229-
cmd("BITOP").arg(match op {
230-
BitAnd => "AND",
231-
BitOr => "OR",
232-
BitXor => "XOR",
233-
BitNot => "NOT"
234-
}).arg(dstkey).arg(srckeys)
230+
fn bit_and<K: ToRedisArgs>(dstkey: K, srckeys: K) {
231+
cmd("BITOP").arg("AND").arg(dstkey).arg(srckeys)
232+
}
233+
234+
#[doc="Perform a bitwise OR between multiple keys (containing string values)
235+
and store the result in the destination key."]
236+
fn bit_or<K: ToRedisArgs>(dstkey: K, srckeys: K) {
237+
cmd("BITOP").arg("OR").arg(dstkey).arg(srckeys)
238+
}
239+
240+
#[doc="Perform a bitwise XOR between multiple keys (containing string values)
241+
and store the result in the destination key."]
242+
fn bit_xor<K: ToRedisArgs>(dstkey: K, srckeys: K) {
243+
cmd("BITOP").arg("XOR").arg(dstkey).arg(srckeys)
244+
}
245+
246+
#[doc="Perform a bitwise NOT of the key (containing string values)
247+
and store the result in the destination key."]
248+
fn bit_not<K: ToRedisArgs>(dstkey: K, srckey: K) {
249+
cmd("BITOP").arg("NOT").arg(dstkey).arg(srckey)
235250
}
236251

237252
#[doc="Get the length of the value stored in a key."]
@@ -470,6 +485,120 @@ implement_commands!(
470485
fn sunionstore<K: ToRedisArgs>(dstkey: K, keys: K) {
471486
cmd("SUNIONSTORE").arg(dstkey).arg(keys)
472487
}
488+
489+
// sorted set commands
490+
491+
#[doc="Add one member to a sorted set, or update its score
492+
if it already exists."]
493+
fn zadd<K: ToRedisArgs, S: ToRedisArgs, M: ToRedisArgs>(key: K, member: M, score: S) {
494+
cmd("ZADD").arg(key).arg(score).arg(member)
495+
}
496+
497+
#[doc="Add multiple members to a sorted set, or update its score
498+
if it already exists."]
499+
fn zadd_multiple<K: ToRedisArgs, S: ToRedisArgs, M: ToRedisArgs>(key: K, items: &[(S, M)]) {
500+
cmd("ZADD").arg(key).arg(items)
501+
}
502+
503+
#[doc="Get the number of members in a sorted set."]
504+
fn zcard<K: ToRedisArgs>(key: K) {
505+
cmd("ZCARD").arg(key)
506+
}
507+
508+
#[doc="Count the members in a sorted set with scores within the given values."]
509+
fn zcount<K: ToRedisArgs, M: ToRedisArgs, MM: ToRedisArgs>(key: K, min: M, max: MM) {
510+
cmd("ZCOUNT").arg(key).arg(min).arg(max)
511+
}
512+
513+
#[doc="Count the members in a sorted set with scores within the given values."]
514+
fn zincr<K: ToRedisArgs, M: ToRedisArgs, D: ToRedisArgs>(key: K, member: M, delta: D) {
515+
cmd("ZINCRBY").arg(key).arg(delta).arg(member)
516+
}
517+
518+
#[doc="Intersect multiple sorted sets and store the resulting sorted set in
519+
a new key using SUM as aggregation function."]
520+
fn zinterstore<K: ToRedisArgs>(dstkey: K, keys: &[K]) {
521+
cmd("ZINTERSTORE").arg(dstkey).arg(keys.len()).arg(keys)
522+
}
523+
524+
#[doc="Intersect multiple sorted sets and store the resulting sorted set in
525+
a new key using MIN as aggregation function."]
526+
fn zinterstore_min<K: ToRedisArgs>(dstkey: K, keys: &[K]) {
527+
cmd("ZINTERSTORE").arg(dstkey).arg(keys.len()).arg(keys).arg("AGGREGATE").arg("MIN")
528+
}
529+
530+
#[doc="Intersect multiple sorted sets and store the resulting sorted set in
531+
a new key using MAX as aggregation function."]
532+
fn zinterstore_max<K: ToRedisArgs>(dstkey: K, keys: &[K]) {
533+
cmd("ZINTERSTORE").arg(dstkey).arg(keys.len()).arg(keys).arg("AGGREGATE").arg("MAX")
534+
}
535+
536+
#[doc="Count the number of members in a sorted set between a given lexicographical range."]
537+
fn zlexcount<K: ToRedisArgs, L: ToRedisArgs>(key: K, min: L, max: L) {
538+
cmd("ZLEXCOUNT").arg(key).arg(min).arg(max)
539+
}
540+
541+
#[doc="Return a range of members in a sorted set, by index"]
542+
fn zrange<K: ToRedisArgs>(key: K, start: int, stop: int) {
543+
cmd("ZRANGE").arg(key).arg(start).arg(stop)
544+
}
545+
546+
#[doc="Return a range of members in a sorted set, by index with scores."]
547+
fn zrange_withscores<K: ToRedisArgs>(key: K, start: int, stop: int) {
548+
cmd("ZRANGE").arg(key).arg(start).arg(stop).arg("WITHSCORES")
549+
}
550+
551+
#[doc="Return a range of members in a sorted set, by lexicographical range."]
552+
fn zrangebylex<K: ToRedisArgs, M: ToRedisArgs, MM: ToRedisArgs>(key: K, min: M, max: MM) {
553+
cmd("ZRANGEBYLEX").arg(key).arg(min).arg(max)
554+
}
555+
556+
#[doc="Return a range of members in a sorted set, by lexicographical
557+
range with offset and limit."]
558+
fn zrangebylex_limit<K: ToRedisArgs, M: ToRedisArgs, MM: ToRedisArgs>(
559+
key: K, min: M, max: MM, offset: int, count: int) {
560+
cmd("ZRANGEBYLEX").arg(key).arg(min).arg(max).arg("LIMIT").arg(offset).arg(count)
561+
}
562+
563+
#[doc="Return a range of members in a sorted set, by lexicographical range."]
564+
fn zrevrangebylex<K: ToRedisArgs, MM: ToRedisArgs, M: ToRedisArgs>(key: K, max: MM, min: M) {
565+
cmd("ZREVRANGEBYLEX").arg(key).arg(max).arg(min)
566+
}
567+
568+
#[doc="Return a range of members in a sorted set, by lexicographical
569+
range with offset and limit."]
570+
fn zrevrangebylex_limit<K: ToRedisArgs, MM: ToRedisArgs, M: ToRedisArgs>(
571+
key: K, max: MM, min: M, offset: int, count: int) {
572+
cmd("ZREVRANGEBYLEX").arg(key).arg(max).arg(min).arg("LIMIT").arg(offset).arg(count)
573+
}
574+
575+
#[doc="Return a range of members in a sorted set, by score."]
576+
fn zrangebyscore<K: ToRedisArgs, M: ToRedisArgs, MM: ToRedisArgs>(key: K, min: M, max: MM) {
577+
cmd("ZRANGEBYSCORE").arg(key).arg(min).arg(max)
578+
}
579+
580+
#[doc="Return a range of members in a sorted set, by score with scores."]
581+
fn zrangebyscore_withscores<K: ToRedisArgs, M: ToRedisArgs, MM: ToRedisArgs>(key: K, min: M, max: MM) {
582+
cmd("ZRANGEBYSCORE").arg(key).arg(min).arg(max).arg("WITHSCORES")
583+
}
584+
585+
#[doc="Return a range of members in a sorted set, by score with limit."]
586+
fn zrangebyscore_limit<K: ToRedisArgs, M: ToRedisArgs, MM: ToRedisArgs>
587+
(key: K, min: M, max: MM, offset: int, count: int) {
588+
cmd("ZRANGEBYSCORE").arg(key).arg(min).arg(max).arg("LIMIT").arg(offset).arg(count)
589+
}
590+
591+
#[doc="Return a range of members in a sorted set, by score with limit with scores."]
592+
fn zrangebyscore_limit_withscores<K: ToRedisArgs, M: ToRedisArgs, MM: ToRedisArgs>
593+
(key: K, min: M, max: MM, offset: int, count: int) {
594+
cmd("ZRANGEBYSCORE").arg(key).arg(min).arg(max).arg("WITHSCORES")
595+
.arg("LIMIT").arg(offset).arg(count)
596+
}
597+
598+
#[doc="Determine the index of a member in a sorted set."]
599+
fn zrank<K: ToRedisArgs, M: ToRedisArgs>(key: K, member: M) {
600+
cmd("ZRANK").arg(key).arg(member)
601+
}
473602
)
474603

475604
impl Commands for Connection {}

‎src/redis/lib.rs

-9
Original file line numberDiff line numberDiff line change
@@ -263,15 +263,6 @@ pub use commands::{
263263
PipelineCommands,
264264
};
265265

266-
#[doc(hidden)]
267-
pub use commands::{
268-
BitOp,
269-
BitAnd,
270-
BitOr,
271-
BitXor,
272-
BitNot,
273-
};
274-
275266
#[doc(hidden)]
276267
pub use types::{
277268
/* low level values */

0 commit comments

Comments
 (0)