Skip to content
/ kiwi Public
forked from Tangruilin/kiwi

a high-performance, large-capacity, multi-tenant, data-persistent, strong data consistency based on raft, Redis-compatible elastic KV data storage system based on RocksDB

License

Notifications You must be signed in to change notification settings

nosql-cn/kiwi

This branch is 5 commits ahead of Tangruilin/kiwi:unstable.

Folders and files

NameName
Last commit message
Last commit date
Oct 19, 2024
Dec 10, 2023
Sep 14, 2024
Oct 19, 2024
Oct 19, 2024
Oct 12, 2024
Apr 3, 2024
Sep 14, 2024
Oct 11, 2023
Oct 12, 2023
Aug 28, 2024
Aug 27, 2024
Oct 12, 2023
Oct 19, 2024
Oct 11, 2023
Aug 15, 2024
Aug 27, 2024
Aug 27, 2024

Repository files navigation

Kiwi

中文

A C++20 implementation of Redis Server, use RocksDB for persist storage.(not including cluster yet)

Requirements

  • Linux or OS X or FreeBSD
# Rocky Linux, Fedora Linux, CentOS
sudo dnf groupinstall -y 'Development Tools'
sudo dnf install cmake g++ autoconf perl -y
git config --global http.version HTTP/1.1
# Ubuntu
sudo apt install cmake g++ autoconf perl -y
git config --global http.version HTTP/1.1

Compile

Execute this command to start compiling Kiwi:

./etc/script/build.sh 

Kiwi is compiled by default in release mode, which does not support debugging. If debugging is needed, compile in debug mode.

./etc/script/build.sh --clear
./etc/script/build.sh --debug

Run

./bin/kiwi ./etc/conf/Kiwi.conf

Support module for write your own extensions

Kiwi supports module now, still in progress, much work to do. I added three commands(ldel, skeys, hgets) for demonstration.

Persistence: Not limited to memory

RocksDB can be configured as backend for Kiwi.

Fully compatible with redis

You can test Kiwi with redis-cli, redis-benchmark, or use redis as master with Kiwi as slave or conversely, it also can work with redis sentinel.

High Performance

  • Kiwi is approximately 20-25% faster than redis if run benchmark with pipeline requests(set -P = 50 or higher).
  • Average 80K requests per seconds for write, and 90K requests per seconds for read.
  • Before run test, please ensure that std::list::size() is O(1), obey the C++11 standards.

Run this command, compare with redis use pipeline commands, try it.

./redis-benchmark -q -n 1000000 -P 50 -c 50

Command List

show all supported commands list

  • cmdlist

key commands

  • type exists del expire pexpire expireat pexpireat ttl pttl persist move keys randomkey rename renamenx scan sort

server commands

  • select dbsize bgsave save lastsave flushdb flushall client debug shutdown bgrewriteaof ping echo info monitor auth

string commands

  • set get getrange setrange getset append bitcount bitop getbit setbit incr incrby incrbyfloat decr decrby mget mset msetnx setnx setex psetex strlen

list commands

  • lpush rpush lpushx rpushx lpop rpop lindex llen lset ltrim lrange linsert lrem rpoplpush blpop brpop brpoplpush

hash commands

  • hget hmget hgetall hset hsetnx hmset hlen hexists hkeys hvals hdel hincrby hincrbyfloat hscan hstrlen

set commands

  • sadd scard srem sismember smembers sdiff sdiffstore sinter sinterstore sunion sunionstore smove spop srandmember sscan

sorted set commands

  • zadd zcard zrank zrevrank zrem zincrby zscore zrange zrevrange zrangebyscore zrevrangebyscore zremrangebyrank zremrangebyscore zpopmin zpopmax zunionstore zinterstore

pubsub commands

  • subscribe unsubscribe publish psubscribe punsubscribe pubsub

multi commands

  • watch unwatch multi exec discard

replication commands

  • sync slaveof

Contact Us

About

a high-performance, large-capacity, multi-tenant, data-persistent, strong data consistency based on raft, Redis-compatible elastic KV data storage system based on RocksDB

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 78.9%
  • Tcl 16.1%
  • Python 2.3%
  • CMake 1.7%
  • C 0.5%
  • Shell 0.3%
  • Go 0.2%