You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gearpump.apache.org by ma...@apache.org on 2017/06/27 03:59:01 UTC
incubator-gearpump git commit: [GEARPUMP-319] Support Sorted Set in
Redis
Repository: incubator-gearpump
Updated Branches:
refs/heads/master 080bdca62 -> 0c3ff4edd
[GEARPUMP-319] Support Sorted Set in Redis
Sorted Set is similar with Set in Redis with unique values .
Each element storage in Sorted Set is associated with a score that is use to sort the element in order .
Author: darionyaphet <da...@gmail.com>
Closes #191 from darionyaphet/GEARPUMP-319.
Project: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/commit/0c3ff4ed
Tree: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/tree/0c3ff4ed
Diff: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/diff/0c3ff4ed
Branch: refs/heads/master
Commit: 0c3ff4edd4ae751758426d6448953574f40a7369
Parents: 080bdca
Author: darionyaphet <da...@gmail.com>
Authored: Tue Jun 27 11:58:44 2017 +0800
Committer: manuzhang <ow...@gmail.com>
Committed: Tue Jun 27 11:58:44 2017 +0800
----------------------------------------------------------------------
.../apache/gearpump/redis/RedisMessage.scala | 93 ++++++++++++++++++++
.../org/apache/gearpump/redis/RedisSink.scala | 10 +++
2 files changed, 103 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/0c3ff4ed/experiments/redis/src/main/scala/org/apache/gearpump/redis/RedisMessage.scala
----------------------------------------------------------------------
diff --git a/experiments/redis/src/main/scala/org/apache/gearpump/redis/RedisMessage.scala b/experiments/redis/src/main/scala/org/apache/gearpump/redis/RedisMessage.scala
index ea738d6..cacf774 100644
--- a/experiments/redis/src/main/scala/org/apache/gearpump/redis/RedisMessage.scala
+++ b/experiments/redis/src/main/scala/org/apache/gearpump/redis/RedisMessage.scala
@@ -371,6 +371,99 @@ object RedisMessage {
}
+ object SortedSets {
+ /**
+ * Adds all the specified members with the specified scores to the sorted set stored at key.
+ *
+ * @param key
+ * @param score
+ * @param member
+ */
+ case class ZADD(key: Array[Byte], score: Double, member: Array[Byte]) {
+ def this(key: String, score: Double, member: String) = {
+ this(toBytes(key), score, toBytes(member))
+ }
+ }
+
+ /**
+ * Increments the score of member in the sorted set stored at key by increment.
+ *
+ * @param key
+ * @param score
+ * @param member
+ */
+ case class ZINCRBY(key: Array[Byte], score: Double, member: Array[Byte]) {
+ def this(key: String, score: Double, member: String) = {
+ this(toBytes(key), score, toBytes(member))
+ }
+ }
+
+ /**
+ * Removes the specified members from the sorted set stored at key.
+ *
+ * @param key
+ * @param member
+ */
+ case class ZREM(key: Array[Byte], member: Array[Byte]) {
+ def this(key: String, member: String) = {
+ this(toBytes(key), toBytes(member))
+ }
+ }
+
+ /**
+ * When all the elements in a sorted set are inserted with the same score,in order to
+ * force lexicographical ordering, this command removes all elements in the sorted set
+ * stored at key between the lexicographical range specified by min and max.
+ *
+ * @param key
+ * @param min
+ * @param max
+ */
+ case class ZREMRANGEBYLEX(key: Array[Byte], min: Array[Byte], max: Array[Byte]) {
+ def this(key: String, min: String, max: String) = {
+ this(toBytes(key), toBytes(min), toBytes(max))
+ }
+ }
+
+ /**
+ * Removes all elements in the sorted set stored at key with rank between start and stop.
+ *
+ * @param key
+ * @param start
+ * @param stop
+ */
+ case class ZREMRANGEBYRANK(key: Array[Byte], start: Long, stop: Long) {
+ def this(key: String, start: Long, stop: Long) = {
+ this(toBytes(key), start, stop)
+ }
+ }
+
+ /**
+ * Removes all elements in the sorted set stored at key with a score between min and max.
+ *
+ * @param key
+ * @param min
+ * @param max
+ */
+ case class ZREMRANGEBYSCORE(key: Array[Byte], min: Double, max: Double) {
+ def this(key: String, min: Double, max: Double) = {
+ this(toBytes(key), min, max)
+ }
+ }
+
+ /**
+ * Get the score associated with the given member in a sorted set
+ *
+ * @param key
+ * @param member
+ */
+ case class ZSCORE(key: Array[Byte], member: Array[Byte]) {
+ def this(key: String, member: String) = {
+ this(toBytes(key), toBytes(member))
+ }
+ }
+ }
+
object String {
/**
http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/0c3ff4ed/experiments/redis/src/main/scala/org/apache/gearpump/redis/RedisSink.scala
----------------------------------------------------------------------
diff --git a/experiments/redis/src/main/scala/org/apache/gearpump/redis/RedisSink.scala b/experiments/redis/src/main/scala/org/apache/gearpump/redis/RedisSink.scala
index 9afb1fe..36babe4 100644
--- a/experiments/redis/src/main/scala/org/apache/gearpump/redis/RedisSink.scala
+++ b/experiments/redis/src/main/scala/org/apache/gearpump/redis/RedisSink.scala
@@ -24,6 +24,7 @@ import org.apache.gearpump.redis.RedisMessage.HyperLogLog._
import org.apache.gearpump.redis.RedisMessage.Keys._
import org.apache.gearpump.redis.RedisMessage.Lists._
import org.apache.gearpump.redis.RedisMessage.Sets._
+import org.apache.gearpump.redis.RedisMessage.SortedSets._
import org.apache.gearpump.redis.RedisMessage.String._
import org.apache.gearpump.streaming.sink.DataSink
import org.apache.gearpump.streaming.task.TaskContext
@@ -109,6 +110,15 @@ class RedisSink(
case msg: SETEX => client.setex(msg.key, msg.seconds, msg.value)
case msg: SETNX => client.setnx(msg.key, msg.value)
case msg: SETRANGE => client.setrange(msg.key, msg.offset, msg.value)
+
+ // Sorted Set
+ case msg: ZADD => client.zadd(msg.key, msg.score, msg.member)
+ case msg: ZINCRBY => client.zincrby(msg.key, msg.score, msg.member)
+ case msg: ZREM => client.zrem(msg.key, msg.member)
+ case msg: ZREMRANGEBYLEX => client.zremrangeByLex(msg.key, msg.min, msg.max)
+ case msg: ZREMRANGEBYRANK => client.zremrangeByRank(msg.key, msg.start, msg.stop)
+ case msg: ZREMRANGEBYSCORE => client.zremrangeByScore(msg.key, msg.min, msg.max)
+ case msg: ZSCORE => client.zscore(msg.key, msg.member)
}
}