Skip to content

Commit 4a263c2

Browse files
author
Roman Janusz
committed
redis: ZRANDMEMBER
1 parent cd56b19 commit 4a263c2

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

commons-redis/src/main/scala/com/avsystem/commons/redis/commands/sortedSets.scala

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,18 @@ trait SortedSetsApi extends ApiSubset {
151151
def zpopmin(key: Key, count: Long): Result[Seq[(Value, Double)]] =
152152
execute(new Zpopmin(key, Opt(count)))
153153

154+
/** Executes [[http://redis.io/commands/zrandmember ZRANDMEMBER]] */
155+
def zrandmember(key: Key): Result[Opt[Value]] =
156+
execute(new Zrandmember(key))
157+
158+
/** Executes [[http://redis.io/commands/zrandmember ZRANDMEMBER]] */
159+
def zrandmember(key: Key, count: Int, distinct: Boolean = true): Result[Seq[Value]] =
160+
execute(new ZrandmemberCount(key, if (distinct) count else -count))
161+
162+
/** Executes [[http://redis.io/commands/zrandmember ZRANDMEMBER]] */
163+
def zrandmemberWithscores(key: Key, count: Int, distinct: Boolean = true): Result[Seq[(Value, Double)]] =
164+
execute(new ZrandmemberWithscores(key, if (distinct) count else -count))
165+
154166
/** Executes [[http://redis.io/commands/zrange ZRANGE]] */
155167
def zrange(key: Key, start: Long = 0, stop: Long = -1): Result[Seq[Value]] =
156168
execute(new Zrange(key, start, stop))
@@ -384,6 +396,21 @@ trait SortedSetsApi extends ApiSubset {
384396
val encoded: Encoded = encoder("ZPOPMAX").key(key).optAdd(count).result
385397
}
386398

399+
private final class Zrandmember(key: Key)
400+
extends RedisOptDataCommand[Value] with NodeCommand {
401+
val encoded: Encoded = encoder("ZRANDMEMBER").key(key).result
402+
}
403+
404+
private final class ZrandmemberCount(key: Key, count: Int)
405+
extends RedisDataSeqCommand[Value] with NodeCommand {
406+
val encoded: Encoded = encoder("ZRANDMEMBER").key(key).add(count).result
407+
}
408+
409+
private final class ZrandmemberWithscores(key: Key, count: Int)
410+
extends AbstractValuesWithScoresCommand with NodeCommand {
411+
val encoded: Encoded = encoder("ZRANDMEMBER").key(key).add(count).add("WITHSCORES").result
412+
}
413+
387414
private final class Zrange(key: Key, start: Long, stop: Long)
388415
extends AbstractZrange[Value]("ZRANGE", multiBulkAsSeqOf[Value])(key, start, stop, withscores = false)
389416

commons-redis/src/test/scala/com/avsystem/commons/redis/commands/SortedSetsApiSuite.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,13 @@ trait SortedSetsApiSuite extends CommandsSuite {
136136
zpopmin("key", 2).assertEquals(Seq("fuu" -> 2.0, "bar" -> 3.0))
137137
}
138138

139+
apiTest("ZRANDMEMBER") {
140+
setup(zadd("key", "lol" -> 1.0, "fuu" -> 2.0, "bar" -> 3.0, "fag" -> 4.0))
141+
zrandmember("key").assert(_.isDefined)
142+
zrandmember("key", count = 2).assert(_.size == 2)
143+
zrandmemberWithscores("key", count = 2).assert(_.size == 2)
144+
}
145+
139146
apiTest("ZRANGE") {
140147
setup(zadd("key", "lol" -> 1.0, "fuu" -> 2.0))
141148
zrange("???").assertEquals(Seq.empty)

0 commit comments

Comments
 (0)