Skip to content

A NoSQL database implementation, alternative to redis.

License

Notifications You must be signed in to change notification settings

gushitong/rekkles

Repository files navigation

rekkles

Build Status NoSQL Go Report Card License

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

  • start rekkles server:
$ 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:
$ 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
  • rekkles:
$ 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

Releases

No releases published

Packages

No packages published

Languages