
Akka-Stream based Redis Client for Scala
- Transport is akka-stream 2.5.x.
- Response parser is fastparse.
- monix.eval.Task support.
Add the following to your sbt build (Scala 2.11.x, 2.12.x):
resolvers += "Sonatype OSS Release Repository" at "https://oss.sonatype.org/content/repositories/releases/" libraryDependencies += "com.github.j5ik2o" %% "reactive-redis-core" % "1.0.21"
resolvers += "Sonatype OSS Snapshot Repository" at "https://oss.sonatype.org/content/repositories/snapshots/" libraryDependencies += "com.github.j5ik2o" %% "reactive-redis-core" % "1.0.22-SNAPSHOT"
| Command | Support |
| CLUSTER ADDSLOTS | TODO |
| CLUSTER ADDSLOTS | TODO |
| CLUSTER ADDSCLUSTER COUNT-FAILURE-REPORTSLOTS | TODO |
| CLUSTER COUNTKEYSINSLOT | TODO |
| CLUSTER DELSLOTS | TODO |
| CLUSTER FAILOVER | TODO |
| CLUSTER FORGET | TODO |
| CLUSTER GETKEYSINSLOT | TODO |
| CLUSTER INFO | TODO |
| CLUSTER KEYSLOT | TODO |
| CLUSTER MEET | TODO |
| CLUSTER NODES | TODO |
| CLUSTER REPLICATE | TODO |
| CLUSTER RESET | TODO |
| CLUSTER SAVECONFIG | TODO |
| CLUSTER SET-CONFIG-EPOCH | TODO |
| CLUSTER SETSLOT | TODO |
| CLUSTER SLAVES | TODO |
| CLUSTER SLOTS | TODO |
| READONLY | TODO |
| READWRITE | TODO |
| Command | Support |
| AUTH | Supported |
| ECHO | Supported |
| PING | Supported |
| QUIT | Supported |
| SELECT | Supported |
| SWAPDB | Supported |
| Command | Support |
| GEOADD | TODO |
| GEODIST | TODO |
| GEOHASH | TODO |
| GEOPOS | TODO |
| GEORADIUS | TODO |
| GEORADIUSBYMEMBER | TODO |
| Command | Support |
| HDEL | Supported |
| HEXISTS | Supported |
| HGET | Supported |
| HGETALL | Supported |
| HINCRBY | TODO |
| HINCRBYFLOAT | TODO |
| HKEYS | TODO |
| HLEN | TODO |
| HMGET | TODO |
| HMSET | TODO |
| HSCAN | TODO |
| HSET | Supported |
| HSETNX | Supported |
| HSTRLEN | TODO |
| HVALS | TODO |
| Command | Support |
| PFADD | TODO |
| PFCOUNT | TODO |
| PFMERGE | TODO |
| Command | Support |
| DEL | Supported |
| DUMP | Supported |
| EXISTS | Supported |
| EXPIRE | Supported |
| EXPIREAT | Supported |
| KEYS | Supported |
| MIGRATE | Supported |
| MOVE | Supported |
| OBJECT | Supported |
| PERSIST | Supported |
| PEXPIRE | Supported |
| PEXPIREAT | Supported |
| PTTL | Supported |
| RANDOMKEY | Supported |
| RENAME | Supported |
| RENAMENX | Supported |
| RESTORE | TODO |
| SCAN | Supported |
| SORT | Supported |
| TOUCH | Supported |
| TTL | Supported |
| TYPE | Supported |
| UNLINK | Supported |
| WAIT | Supported |
| BLPOP | Supported |
| BRPOP | Supported |
| BRPOPLPUSH | Supported |
| LINDEX | |
| LINSERT | |
| LLEN | Supported |
| LPOP | |
| LPUSH | Supported |
| LPUSHX | |
| LRANGE | Supported |
| LREM | |
| LSET | |
| LTRIM | |
| RPOP | |
| RPOPLPUSH | |
| RPUSH | Supported |
| RPUSHX | |
| PSUBSCRIBE | |
| PUBLISH | |
| PUBSUB | |
| PUNSUBSCRIBE | |
| SUBSCRIBE | |
| UNSUBSCRIBE | |
| EVAL | |
| EVALSHA | |
| SCRIPT DEBUG | |
| SCRIPT EXISTS | |
| SCRIPT FLUSH | |
| SCRIPT KILL | |
| SCRIPT LOAD | |
| BGREWRITEAOF | |
| BGSAVE | |
| CLIENT GETNAME | |
| CLIENT KILL | |
| CLIENT LIST | |
| CLIENT PAUSE | |
| CLIENT REPLY | |
| CLIENT SETNAME | |
| COMMAND | |
| COMMAND COUNT | |
| COMMAND GETKEYS | |
| COMMAND INFO | |
| CONFIG GET | |
| CONFIG RESETSTAT | |
| CONFIG REWRITE | |
| CONFIG SET | |
| DBSIZE | |
| DEBUG OBJECT | |
| DEBUG SEGFAULT | |
| FLUSHALL | |
| FLUSHDB | |
| INFO | |
| LASTSAVE | |
| MEMORY DOCTOR | |
| MEMORY HELP | |
| MEMORY MALLOC-STATS | |
| MEMORY PURGE | |
| MEMORY STATS | |
| MEMORY USAGE | |
| MONITOR | |
| ROLE | |
| SAVE | |
| SHUTDOWN | |
| SLAVEOF | |
| SLOWLOG | |
| SYNC | |
| TIME | |
| Command | Support |
| SADD | Supported |
| SCARD | TODO |
| SDIFF | TODO |
| SDIFFSTORE | TODO |
| SINTER | TODO |
| SINTERSTORE | TODO |
| SISMEMBER | TODO |
| SMEMBERS | TODO |
| SMOVE | TODO |
| SPOP | TODO |
| SRANDMEMBER | TODO |
| SREM | TODO |
| SSCAN | TODO |
| SUNION | TODO |
| SUNIONSTORE | TODO |
| Command | Support |
| BZPOPMAX | TODO |
| BZPOPMIN | TODO |
| ZADD | TODO |
| ZCARD | TODO |
| ZCOUNT | TODO |
| ZINCRBY | TODO |
| ZINTERSTORE | TODO |
| ZLEXCOUNT | TODO |
| ZPOPMAX | TODO |
| ZPOPMIN | TODO |
| ZRANGE | TODO |
| ZRANGEBYLEX | TODO |
| ZRANGEBYSCORE | TODO |
| ZRANK | TODO |
| ZREM | TODO |
| ZREMRANGEBYLEX | TODO |
| ZREMRANGEBYRANK | TODO |
| ZREMRANGEBYSCORE | TODO |
| ZREVRANGE | TODO |
| ZREVRANGEBYLEX | TODO |
| ZREVRANGEBYSCORE | TODO |
| ZREVRANK | TODO |
| ZSCAN | TODO |
| ZSCORE | TODO |
| ZUNIONSTORE | TODO |
| Command | Support |
| XADD | TODO |
| XLEN | TODO |
| XPENDING | TODO |
| XRANGE | TODO |
| XREAD | TODO |
| XREADGROUP | TODO |
| XREVRANGE | TODO |
| Command | Support |
| APPEND | Supported |
| BITCOUNT | Supported |
| BITFIELD | Supported |
| BITOP | Supported |
| BITPOS | Supported |
| DECR | Supported |
| DECRBY | Supported |
| GET | Supported |
| GETBIT | Supported |
| GETRANGE | Supported |
| GETSET | Supported |
| INCR | Supported |
| INCRBY | Supported |
| INCRBYFLOAT | Supported |
| MGET | Supported |
| MSET | Supported |
| MSETNX | Supported |
| PSETEX | Supported |
| SET | Supported |
| SETBIT | Supported |
| SETEX | Supported |
| SETNX | Supported |
| SETRANGE | Supported |
| STRLEN | Supported |
| Command | Support |
| DISCARD | Supported |
| EXEC | Supported |
| MULTI | Supported |
| UNWATCH | Supported |
| WATCH | Supported |
import monix.execution.Scheduler.Implicits.global implicit val system = ActorSystem() val peerConfig = PeerConfig(remoteAddress = new InetSocketAddress("127.0.0.1", 6379)) val connection = RedisConnection(peerConfig) val client = RedisClient() val result = (for{ _ <- client.set("foo", "bar") r <- client.get("foo") } yield r).run(connection).runAsync println(result) // bar import monix.execution.Scheduler.Implicits.global implicit val system = ActorSystem() val peerConfig = PeerConfig(remoteAddress = new InetSocketAddress("127.0.0.1", 6379)) val pool = RedisConnectionPool.ofRoundRobin(sizePerPeer = 5, Seq(peerConfig), RedisConnection(_)) // powered by RoundRobinPool val connection = RedisConnection(connectionConfig) val client = RedisClient() // Fucntion style val result1 = pool.withConnectionF{ con => (for{ _ <- client.set("foo", "bar") r <- client.get("foo") } yield r).run(con) }.runAsync println(result1) // bar // Monadic style val result2 = (for { _ <- ConnectionAutoClose(pool)(client.set("foo", "bar").run) r <- ConnectionAutoClose(pool)(client.get("foo").run) } yield r).run().runAsync println(result2) // bar if you want to use other pooling implementation, please select from the following modules.
- reactive-redis-pool-commons (commons-pool2)
- reactive-redis-pool-scala (scala-pool)
- reactive-redis-pool-fop (fast-object-pool)
- reactive-redis-pool-stormpot (stormpot)
Master & Slaves aggregate connection
import monix.execution.Scheduler.Implicits.global implicit val system = ActorSystem() val masterPeerConfig = PeerConfig(remoteAddress = new InetSocketAddress("127.0.0.1", 6379)) val slavePeerConfigs = Seq( PeerConfig(remoteAddress = new InetSocketAddress("127.0.0.1", 6380)), PeerConfig(remoteAddress = new InetSocketAddress("127.0.0.1", 6381)), PeerConfig(remoteAddress = new InetSocketAddress("127.0.0.1", 6382)) ) val connection = new RedisMasterSlavesConnection( masterConnectionPoolFactory = RedisConnectionPool.ofRoundRobin(sizePerPeer = 2, Seq(masterPeerConfig), RedisConnection(_)), slaveConnectionPoolFactory = RedisConnectionPool.ofRoundRobin(sizePerPeer = 2, slavePeerConfigs, RedisConnection(_)) ) val client = RedisClient() val result = (for{ _ <- client.set("foo", "bar") // write to master r <- client.get("foo") // read from any slave } yield r).run(connection).runAsync println(result) // bar MIT License / Copyright (c) 2016 Junichi Kato