Kvrocks is an open-source key-value database which is based on rocksdb and compatible with Redis protocol. Intention to decrease the cost of memory and increase the capability while compared to Redis. The design of replication and storage was inspired by rocksplicator
and blackwidow
.
Kvrocks has the following key features:
- Redis protocol, user can use redis client to visit the kvrocks
- Namespace, similar to redis db but use token per namespace
- Replication, async replication using binlog like MySQL
- High Available, supports redis sentinel to failover when master or slave was failed
Thanks for designers @田凌宇 and @范世丽 contribute the kvrocks logo for us.
Tickets a pull reqeust to let us known that you're using kvrocks and add your logo to README
- g++ (required by c++11, version >= 4.8)
- autoconf automake libtool snappy
NOTE: You should install the snappy first:
# Centos/Redhat
sudo yum install -y epel-release && sudo yum install -y git gcc gcc-c++ make snappy snappy-devel autoconf automake libtool which gtest gtest-devel
# Ubuntu
sudo apt-get install gcc g++ make libsnappy-dev autoconf automake libtool which libgtest-dev
# MACOSX
brew install autoconf automake libtool snappy googletest
It is as simple as:
$ git clone --recursive https://github.com/kvrockslabs/kvrocks.git
$ cd kvrocks
$ make -j4
$ ./src/kvrocks -c kvrocks.conf
NOTE: You should install the googletest first
make test
- centos 6/7
- ubuntu
- macosx
$ docker run -it -p 6666:6666 kvrocks/kvrocks
$ redis-cli -p 6666
127.0.0.1:6666> get a
(nil)
namespace was used to isolate data between users. unlike all the redis databases can be visited by requirepass
, we use one token per namespace. requirepass
was regraded as admin token, only admin token allows to access the namespace command, as well as some commands like config
, slaveof
, bgsave
, etc…
# add token
127.0.0.1:6666> namespace add ns1 mytoken
OK
# update token
127.0.0.1:6666> namespace set ns1 new_token
OK
# list namespace
127.0.0.1:6666> namespace get *
1) "ns1"
2) "new_token"
3) "__namespace"
4) "foobared"
# delete namespace
127.0.0.1:6666> namespace del ns1
OK
- migrate from redis to kvrocks, use redis-migrate-tool which was developed by vipshop
- migrate from kvrocks to redis. use
kvrocks2redis
in build dir
- CPU: 48 cores Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
- Memory: 32 GiB
- NET: Intel Corporation I350 Gigabit Network Connection
- DISK: 2TB NVMe Intel SSD DC P460
Benchmark Client: multi-thread redis-benchmark(unstable branch)
kvrocks: workers = 16, benchmark: 8 threads/ 512 conns / 128 payload
latency: 99.9% < 10ms
kvrocks: workers = 16, benchmark: 8 threads/ 512 conns
latency: 99.9% < 10ms
kvrocks: workers = 16, benchmark: 8 threads/ 512 conns / 128 payload
latency: 99.9% < 10ms
Kvrocks is under the BSD-3-Clause license. See the LICENSE file for details.