Skip to content
Switch branches/tags


Failed to load latest commit information.
Latest commit message
Commit time


image image GitHub license GitHub stars

Kvrocks is a distributed key value NoSQL database that uses RocksDB as storage engine and is compatible with Redis protocol. Kvrocks intends 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
  • Cluster mode, centralized management but compatible with Redis cluster client access

Thanks for designers @田凌宇 and @范世丽 contribute the kvrocks logo for us.

Who uses kvrocks

Meitu Ctrip JiaTou
Baidu BaishanCloud Rgyun
Xueqiu U-NEXT

Tickets a pull reqeust to let us known that you're using kvrocks and add your logo to README

Building kvrocks


  • g++ (required by c++11, version >= 4.8)
  • autoconf automake libtool cmake


# Centos/Redhat
sudo yum install -y epel-release && sudo yum install -y git gcc gcc-c++ make cmake autoconf automake libtool which

# Ubuntu/Debian
sudo apt update
sudo apt-get install gcc g++ make cmake autoconf automake libtool

brew install autoconf automake libtool cmake

It is as simple as:

$ git clone
$ cd kvrocks
$ mkdir build
$ ./ build # manually run CMake if you want to build Debug version or add some build options

Running kvrocks

$ ./build/kvrocks -c kvrocks.conf

Running test cases

$ # make sure CMake was executed in ./build
$ cd build
$ make unittest
$ ./unittest

Supported platforms

  • centos 6/7
  • ubuntu
  • macosx

Try kvrocks using Docker

$ docker run -it -p 6666:6666 kvrocks/kvrocks
$ redis-cli -p 6666> get a


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>  namespace add ns1 my_token

# update token> namespace set ns1 new_token

# list namespace> namespace get *
1) "ns1"
2) "new_token"
3) "__namespace"
4) "foobared"

# delete namespace> namespace del ns1


Kvrocks implements a proxyless centralized cluster solution but its accessing method is completely compatible with the Redis cluster client. You can use Redis cluster SDKs to access the kvrocks cluster. More details, please see: Kvrocks Cluster Introduction


For more informations, can see: Kvrocks Wiki


  • Export the Kvrocks monitor metrics, please use kvrocks_exporter
  • 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 P4600

Benchmark Client: multi-thread redis-benchmark(unstable branch)

1. Commands QPS

kvrocks: workers = 16, benchmark: 8 threads/ 512 conns / 128 payload

latency: 99.9% < 10ms


2. QPS on different payloads

kvrocks: workers = 16, benchmark: 8 threads/ 512 conns

latency: 99.9% < 10ms


3. QPS on different workers

kvrocks: workers = 16, benchmark: 8 threads/ 512 conns / 128 payload

latency: 99.9% < 10ms



Kvrocks is under the Apache License Version 2.0. See the LICENSE file for details.