rekkles
rekkles is a high performance no-sql database build on BadgerDB with redis protocol
support. It meant to provide a key-value store alternative to redis.
- Pure
golang
implementation, no c/c++
dependency
- Compatible with redis protocol, Redis client are supported
- Persistent all data to the disk
- Better transaction support, ttl support
Install
go get github.com/gushitong/rekkles
rekkles
server start options:
rekkles -h
Usage of rekkles:
-a string
auth string
-b string
listen address (default ":6380")
-d string
working dir (default "/tmp/rekkles")
-v string
value log dir (default "/tmp/rekkles")
-s bool
sync all writes to disk. Setting this to false would achieve better performance, but may cause data to be lost. (default true)
Example
$ rekkles -d /tmp/araydb -v /tmp/araydb -b :6380
2018/09/29 12:05:53 started server at :6380
- connect
rekkles
with redis-cli
:
$ redis-cli -p 6380
127.0.0.1:6380> SET k 1
OK
127.0.0.1:6380> GET k
"1"
127.0.0.1:6380> HSET hash k v
(integer) 1
127.0.0.1:6380> HGET hash k
"v"
127.0.0.1:6380> PING
PONG
Redis Command Support
Strings |
Lists |
Hashes |
Sets |
Sorted Sets |
append |
lindex |
hdel |
sadd |
zadd |
decr |
llen |
hexists |
scard |
zcard |
decrby |
lpop |
hget |
sismember |
zcount |
get |
lpush |
hgetall |
smembers |
zincrby |
getbit |
lpushx |
hincrby |
spop |
zpopmax |
getrange |
lrange |
hincrbyfloat |
|
zpopmin |
getset |
lset |
hkeys |
|
zrange |
incr |
|
hlen |
|
zrangebyscore |
incrby |
|
hmget |
|
zrank |
incrbyfloat |
|
hmset |
|
zrevrange |
mget |
|
hscan |
|
zrevrangebyscore |
mset |
|
hset |
|
zrevrank |
msetnx |
|
hsetnx |
|
zscore |
set |
|
hstrlen |
|
|
setbit |
|
hvals |
|
|
setex |
|
|
|
|
setnx |
|
|
|
|
setrange |
|
|
|
|
strlen |
|
|
|
|
Benchmark
This benchmark running on my local mac, rekkles
should have better performance on SSD.
$ redis-benchmark -p 6379 -c 50 -n 10000 -q
PING_INLINE: 56497.18 requests per second
PING_BULK: 56818.18 requests per second
SET: 58823.53 requests per second
GET: 57142.86 requests per second
INCR: 59171.60 requests per second
LPUSH: 59523.81 requests per second
RPUSH: 57142.86 requests per second
LPOP: 59880.24 requests per second
RPOP: 52631.58 requests per second
SADD: 61728.39 requests per second
SPOP: 56497.18 requests per second
LPUSH (needed to benchmark LRANGE): 59880.24 requests per second
LRANGE_100 (first 100 elements): 19047.62 requests per second
LRANGE_300 (first 300 elements): 9074.41 requests per second
LRANGE_500 (first 450 elements): 6501.95 requests per second
LRANGE_600 (first 600 elements): 4933.40 requests per second
MSET (10 keys): 45871.56 requests per second
$ redis-benchmark -p 6380 -c 50 -n 10000 -q
PING_INLINE: 45662.10 requests per second
PING_BULK: 48543.69 requests per second
SET: 26881.72 requests per second
GET: 32051.28 requests per second
INCR: 30769.23 requests per second
LPUSH: 24937.66 requests per second
RPUSH: 38461.54 requests per second
LPOP: 24691.36 requests per second
RPOP: 39215.69 requests per second
SADD: 36496.35 requests per second
SPOP: 30120.48 requests per second
LPUSH (needed to benchmark LRANGE): 26954.18 requests per second
LRANGE_100 (first 100 elements): 8960.57 requests per second
LRANGE_300 (first 300 elements): 8045.05 requests per second
LRANGE_500 (first 450 elements): 8312.55 requests per second
LRANGE_600 (first 600 elements): 9049.77 requests per second
MSET (10 keys): 33670.04 requests per second