KiviDB is een hoogperformante, multi-threaded key-value store geschreven in Rust, ontworpen als alternatief voor Redis en Valkey. Het is volledig compatibel met het Redis-protocol (RESP2 en RESP3), waardoor bestaande clients en bibliotheken direct kunnen worden gebruikt.
Belangrijkste kenmerken:
- Prestaties: Maakt gebruik van een sharded in-memory ontwerp. In tests op 32 cores behaalt het tot 21 miljoen gepipelined GETs per seconde, wat aanzienlijk sneller is dan Redis 8 en Dragonfly.
- Functionaliteit: Ingebouwde ondersteuning voor full-text en vector search (FLAT/HNSW) in Redis Stack-stijl. Optioneel zijn Lua-scripting en TLS beschikbaar via specifieke build-varianten.
- Persistentie: Ondersteunt snapshots (
dump.kdb) en een optioneel append-only bestand (AOF) voor databestendigheid.
- Deployment: Eenvoudig te starten via Docker of te compileren vanuit broncode met de Rust toolchain. Het luistert standaard op poort 6380.
- Licentie: De software is open source onder de AGPL-3.0 licentie, waarbij commercieel gebruik in applicaties is toegestaan zolang de server zelf niet wordt gewijzigd en als service wordt aangeboden zonder de broncode te delen.
KiviDB: Een snel, multi-threaded alternatief voor Redis® en Valkey
De software draait op elke beschikbare core via een sharded in-memory key-value ontwerp en biedt persistentie via snapshots en een optioneel append-only bestand (AOF).
Op een systeem met 32 cores behaalt KiviDB 21 miljoen gepipelined GETs per seconde. Dit is ongeveer 9× sneller dan Redis 8 en 2,3× sneller dan Dragonfly, met een p99-latentie die minder dan de helft is van die van Dragonfly.
Snel aan de slag
Docker
Start KiviDB eenvoudig met Docker:
docker run -d -p 6380:6380 kividb/kividb
Testen met redis-cli
KiviDB luistert standaard op poort 6380 (in plaats van de Redis-poort 6379), zodat beide naast elkaar kunnen draaien.
redis-cli -p 6380 PING # Antwoord: PONG
U kunt de client naar deze poort richten of de vlag --port 6379 gebruiken om de standaardpoort te wijzigen.
Kernkenmerken
- Protocol: Redis-compatibele command surface.
- Zoeken en vectoren: Redis Stack-stijl
FT.* commando's voor full-text, tag, numerieke en vector search (FLAT / HNSW).
- Lua-scripting: Optionele Cargo-feature.
EVAL, SCRIPT, FUNCTION, FCALL en gerelateerde commando's zijn beschikbaar in builds met --features lua.
- TLS: Optionele Cargo-feature (
--features tls).
- Standaard luisteradres:
0.0.0.0:6380, met protected mode ingeschakeld.
- Licentie: GNU Affero General Public License v3 (AGPL-3.0-only), open source. Het gebruik van KiviDB plaatst uw eigen applicatie niet automatisch onder de AGPL.
Vergelijking met alternatieven
| Kenmerk | KiviDB | Redis 8 | Valkey 8 | Dragonfly | KeyDB |
| Licentie | AGPL-3.0 | RSALv2, SSPLv1 of AGPL-3.0 | BSD-3-Clause | BSL 1.1 | BSD-3-Clause |
| Taal | Rust | C | C | C++ | C++ |
| Architectuur | Elke core (sharded) | Eén thread (I/O threads) | Eén thread (I/O threads) | Elke core (shared-nothing) | Meerdere threads |
| Full-text & Vector search (FT.\*) | Ingebouwd | Ingebouwd (Query Engine) | Separate module | Ingebouwd | Nee |
| Lua-scripting | Lua build | Ja | Ja | Ja | Ja |
Status per oktober 2026.
Prestaties
Alle onderstaande cijfers zijn gebaseerd op tests in oktober 2026 op AWS Graviton3 bare metal (c7gn.metal, 64 vCPU, beperkt tot 32 cores).
Key-value prestaties
Getest met memtier_benchmark (10 miljoen keys, 100-byte waarden, 300 pipelined verbindingen).
| Metriek | KiviDB 1.1.0 | Dragonfly 2.0.2 | Redis 8.10 | Redis Cluster (32 shards) |
| GET, pipeline 16 (ops/s) | 21.2M | 9.1M | 2.4M | 4.7M |
| SET, pipeline 16 (ops/s) | 19.2M | 8.5M | 2.0M | 4.7M |
| GET, geen pipelining (ops/s) | 3.07M | 3.35M | 1.32M | 1.46M |
| SET, geen pipelining (ops/s) | 3.12M | 3.38M | 1.54M | 1.46M |
| p99 latentie, GET / SET (ms) | 0.36 / 0.42 | 0.88 / 1.07 | 2.2 / 2.7 | - |
| Geheugen per key | 177 B | 134 B | 178 B | 183 B |
Vector search prestaties
Getest op glove-25-angular (1.18M vectoren, 25 dimensies) met HNSW.
| Metriek | KiviDB 1.1.0 | Dragonfly 2.0.2 | Redis 8.10 (query engine) |
| Queries/s bij ef 64 (recall@10) | 59.3k (0.943) | 41.3k (0.912) | 31.8k (0.912) |
| Queries/s bij ef 128 | 50.7k (0.961) | 40.3k (0.937) | 28.9k (0.937) |
| Queries/s bij ef 256 | 31.5k (0.989) | 36.2k (0.979) | 21.1k (0.979) |
| Queries/s bij ef 512 | 18.7k (0.998) | 29.8k (0.995) | 13.7k (0.995) |
| Ingest en index build tijd | 31 s | 13 s | 38 s |
| Geheugen na ingest | 1.66 GB | 1.13 GB | 1.07 GB |
Vector search (Redis Stack-stijl FT.\*)
KiviDB implementeert zoek- en vectorcommando's die compatibel zijn met Redis Stack. Dit kan worden gebruikt voor full-text (BM25), tags, numerieke data en vector ANN (FLAT of HNSW) op hash-velden.
Snelstart Vector Search
- Index aanmaken:
``bash redis-cli -p 6380 FT.CREATE idx ON HASH PREFIX 1 doc: SCHEMA \ vec VECTOR HNSW 10 TYPE FLOAT32 DIM 128 DISTANCEMETRIC COSINE M 16 EFCONSTRUCTION 128 ``
- Vectoren opslaan:
Sla vectoren op als ruwe FLOAT32 little-endian bytes in een hash-veld (DIM × 4 bytes).
- Query uitvoeren met KNN (Dialect 2):
``bash redis-cli -p 6380 FT.SEARCH idx '*=>[KNN 10 @vec $q]' PARAMS 2 q <blob> DIALECT 2 ``
Persistentie en herstarten
KiviDB gebruikt native snapshots (dump.kdb) om keys en index-schema's op te slaan. Wanneer u SAVE of BGSAVE uitvoert terwijl indexen zijn gevuld, wordt ook de HNSW-graaf van elk vectorveld opgeslagen. Hierdoor blijft de zoekkwaliteit na een herstart gelijk.
Tijdens het heropbouwen van zoekindexen bij het opstarten geven de meeste commando's LOADING terug. Commando's zoals PING en INFO blijven wel werken.
Build Varianten
KiviDB is beschikbaar in vier varianten, afhankelijk van de gekozen Cargo-features:
| Variant | Cargo features | Toevoegingen |
| Default | Geen | De core server, zonder Lua of TLS |
| Lua | lua | Lua-scripting (EVAL, EVALSHA, SCRIPT, etc.) |
| TLS | tls | TLS listener en TLS tussen cluster-nodes en replica's |
| Full | lua, tls | Zowel Lua als TLS |
Bouwen vanuit broncode
Vereist een stabiele Rust toolchain (Rust 1.89 of nieuwer).
git clone https://github.com/kividbio/kividb.git
cd kividb
cargo build --release # Default variant
cargo build --release --features lua # Met Lua-scripting
cargo build --release --features tls # Met TLS
cargo build --release --features lua,tls # Volledige versie
./target/release/kividb
Op Linux gebruikt de server io_uring indien het kernel dit toestaat, anders valt hij terug op Tokio.
Operationele details
Protected Mode
Standaard staat protected mode aan. Als er geen bind-adres is ingesteld en de standaardgebruiker heeft geen wachtwoord, kunnen alleen clients op dezelfde machine (loopback) verbinden.
Om verbindingen van andere machines toe te staan:
- Stel een wachtwoord in:
--requirepass <wachtwoord> of ACL SETUSER default ><wachtwoord>.
- Stel een bind-adres in:
--bind <adres>.
- Zet protected mode uit:
--protected-mode no.
Docker Gebruik
Images zijn beschikbaar op Docker Hub en GitHub Container Registry.
docker run -p 6380:6380 ghcr.io/kividbio/kividb --requirepass "change-me"
Voor AOF-persistentie (met volume mount):
docker run -p 6380:6380 \
-v $(pwd)/data:/home/kividb \
ghcr.io/kividbio/kividb --aof --requirepass "change-me"
Configuratie
KiviDB kan worden geconfigureerd via command-line vlaggen of een Redis-stijl configuratiebestand (/etc/kividb/kividb.conf).
Belangrijke vlaggen:
| Vlag | Standaard | Beschrijving |
--port | 6380 | Poort om op te luisteren |
--bind | 0.0.0.0 | Adres om op te luisteren (zet protected mode uit) |
--protected-mode | yes | Beveiligingsmodus voor onbeveiligde verbindingen |
--threads | 0 (auto) | Aantal worker threads |
--databases | 16 | Aantal databases |
--dir | start directory | Locatie voor dump.kdb en appendonly.aof |
--aof | off | Append-only file persistentie |
--maxmemory | 0 (unlimited) | Geheugenlimiet in bytes |
--maxmemory-policy | noeviction | Gedrag bij bereiken limiet (bijv. allkeys-lru) |
--loglevel | info | Log-niveau (debug, verbose, notice, warning, nothing) |
--io-model | auto | I/O model: auto, uring of tokio |
--requirepass | none | Wachtwoord voor de standaardgebruiker |
--cluster-enabled | no | Cluster mode inschakelen |
TLS (Transport Layer Security)
TLS-clients maken verbinding via een aparte poort (--tls-port), terwijl onversleuteld verkeer op --port blijft.
Voorbeeld startcommando:
./target/release/kividb --port 6380 --tls-port 6381 --tls-cert-file cert.pem --tls-key-file key.pem
Client verbinding:
redis-cli --tls -p 6381 --cacert ca.pem
Update Controle bij Opstarten
Bij het opstarten maakt een release-build van KiviDB één HTTPS-verzoek naar GitHub om te controleren of er een nieuwere versie beschikbaar is. Indien ja, wordt er een korte melding getoond. Er worden geen gegevens verzonden behalve het verzoek zelf met een User-Agent.
Dit kan worden uitgeschakeld via:
--update-check no in de command-line.
update-check no in het configuratiebestand.
KIVIDBNOUPDATE_CHECK=1 in de omgevingsvariabelen.
Licentie en Juridisch
KiviDB is open source software onder de GNU Affero General Public License v3 (AGPL-3.0-only).
- Gebruik in commerciële applicaties: U kunt KiviDB gebruiken als database voor een commerciële of closed-source applicatie. Omdat uw applicatie via het netwerk communiceert, wordt het niet beschouwd als een afgeleid werk van KiviDB en gelden de AGPL-verplichtingen niet voor uw applicatiecode.
- Modificaties: Als u KiviDB zelf wijzigt en deze gewijzigde versie via een netwerk aanbiedt (bijv. als een hosted service), moet u de broncode van uw wijzigingen beschikbaar stellen.
- Commerciële licentie: Voor organisaties die geen AGPL-software mogen gebruiken of KiviDB willen embedden zonder wijzigingen te publiceren, is er een commerciële licentie beschikbaar via
support@kividb.io.
FAQ
- Kan ik KiviDB gebruiken voor mijn commerciële app? Ja.
- Kan ik KiviDB als service aanbieden? Ja. Als u het ongewijzigd draait, hoeft u niets te publiceren. Bij modificaties moet de broncode van de server worden gedeeld.
- Tellen client-bibliotheken of configuraties als modificaties? Nee.
Merken
Redis® is een geregistreerd handelsmerk van Redis Ltd. KiviDB is niet gelieerd aan Redis Ltd.
KiviDB: Een snel, multi-threaded alternatief voor Redis® en Valkey
De software draait op elke beschikbare core via een sharded in-memory key-value ontwerp en biedt persistentie via snapshots en een optioneel append-only bestand (AOF).
Op een systeem met 32 cores behaalt KiviDB 21 miljoen gepipelined GETs per seconde. Dit is ongeveer 9× sneller dan Redis 8 en 2,3× sneller dan Dragonfly, met een p99-latentie die minder dan de helft is van die van Dragonfly.
Snel aan de slag
Docker
Start KiviDB eenvoudig met Docker:
docker run -d -p 6380:6380 kividb/kividb
Testen met redis-cli
KiviDB luistert standaard op poort 6380 (in plaats van de Redis-poort 6379), zodat beide naast elkaar kunnen draaien.
redis-cli -p 6380 PING # Antwoord: PONG
U kunt de client naar deze poort richten of de vlag --port 6379 gebruiken om de standaardpoort te wijzigen.
Kernkenmerken
- Protocol: Redis-compatibele command surface.
- Zoeken en vectoren: Redis Stack-stijl
FT.* commando's voor full-text, tag, numerieke en vector search (FLAT / HNSW).
- Lua-scripting: Optionele Cargo-feature.
EVAL, SCRIPT, FUNCTION, FCALL en gerelateerde commando's zijn beschikbaar in builds met --features lua.
- TLS: Optionele Cargo-feature (
--features tls).
- Standaard luisteradres:
0.0.0.0:6380, met protected mode ingeschakeld.
- Licentie: GNU Affero General Public License v3 (AGPL-3.0-only), open source. Het gebruik van KiviDB plaatst uw eigen applicatie niet automatisch onder de AGPL.
Vergelijking met alternatieven
| Kenmerk | KiviDB | Redis 8 | Valkey 8 | Dragonfly | KeyDB |
| Licentie | AGPL-3.0 | RSALv2, SSPLv1 of AGPL-3.0 | BSD-3-Clause | BSL 1.1 | BSD-3-Clause |
| Taal | Rust | C | C | C++ | C++ |
| Architectuur | Elke core (sharded) | Eén thread (I/O threads) | Eén thread (I/O threads) | Elke core (shared-nothing) | Meerdere threads |
| Full-text & Vector search (FT.\*) | Ingebouwd | Ingebouwd (Query Engine) | Separate module | Ingebouwd | Nee |
| Lua-scripting | Lua build | Ja | Ja | Ja | Ja |
Status per oktober 2026.
Prestaties
Alle onderstaande cijfers zijn gebaseerd op tests in oktober 2026 op AWS Graviton3 bare metal (c7gn.metal, 64 vCPU, beperkt tot 32 cores).
Key-value prestaties
Getest met memtier_benchmark (10 miljoen keys, 100-byte waarden, 300 pipelined verbindingen).
| Metriek | KiviDB 1.1.0 | Dragonfly 2.0.2 | Redis 8.10 | Redis Cluster (32 shards) |
| GET, pipeline 16 (ops/s) | 21.2M | 9.1M | 2.4M | 4.7M |
| SET, pipeline 16 (ops/s) | 19.2M | 8.5M | 2.0M | 4.7M |
| GET, geen pipelining (ops/s) | 3.07M | 3.35M | 1.32M | 1.46M |
| SET, geen pipelining (ops/s) | 3.12M | 3.38M | 1.54M | 1.46M |
| p99 latentie, GET / SET (ms) | 0.36 / 0.42 | 0.88 / 1.07 | 2.2 / 2.7 | - |
| Geheugen per key | 177 B | 134 B | 178 B | 183 B |
Vector search prestaties
Getest op glove-25-angular (1.18M vectoren, 25 dimensies) met HNSW.
| Metriek | KiviDB 1.1.0 | Dragonfly 2.0.2 | Redis 8.10 (query engine) |
| Queries/s bij ef 64 (recall@10) | 59.3k (0.943) | 41.3k (0.912) | 31.8k (0.912) |
| Queries/s bij ef 128 | 50.7k (0.961) | 40.3k (0.937) | 28.9k (0.937) |
| Queries/s bij ef 256 | 31.5k (0.989) | 36.2k (0.979) | 21.1k (0.979) |
| Queries/s bij ef 512 | 18.7k (0.998) | 29.8k (0.995) | 13.7k (0.995) |
| Ingest en index build tijd | 31 s | 13 s | 38 s |
| Geheugen na ingest | 1.66 GB | 1.13 GB | 1.07 GB |
Vector search (Redis Stack-stijl FT.\*)
KiviDB implementeert zoek- en vectorcommando's die compatibel zijn met Redis Stack. Dit kan worden gebruikt voor full-text (BM25), tags, numerieke data en vector ANN (FLAT of HNSW) op hash-velden.
Snelstart Vector Search
- Index aanmaken:
``bash redis-cli -p 6380 FT.CREATE idx ON HASH PREFIX 1 doc: SCHEMA \ vec VECTOR HNSW 10 TYPE FLOAT32 DIM 128 DISTANCEMETRIC COSINE M 16 EFCONSTRUCTION 128 ``
- Vectoren opslaan:
Sla vectoren op als ruwe FLOAT32 little-endian bytes in een hash-veld (DIM × 4 bytes).
- Query uitvoeren met KNN (Dialect 2):
``bash redis-cli -p 6380 FT.SEARCH idx '*=>[KNN 10 @vec $q]' PARAMS 2 q <blob> DIALECT 2 ``
Persistentie en herstarten
KiviDB gebruikt native snapshots (dump.kdb) om keys en index-schema's op te slaan. Wanneer u SAVE of BGSAVE uitvoert terwijl indexen zijn gevuld, wordt ook de HNSW-graaf van elk vectorveld opgeslagen. Hierdoor blijft de zoekkwaliteit na een herstart gelijk.
Tijdens het heropbouwen van zoekindexen bij het opstarten geven de meeste commando's LOADING terug. Commando's zoals PING en INFO blijven wel werken.
Build Varianten
KiviDB is beschikbaar in vier varianten, afhankelijk van de gekozen Cargo-features:
| Variant | Cargo features | Toevoegingen |
| Default | Geen | De core server, zonder Lua of TLS |
| Lua | lua | Lua-scripting (EVAL, EVALSHA, SCRIPT, etc.) |
| TLS | tls | TLS listener en TLS tussen cluster-nodes en replica's |
| Full | lua, tls | Zowel Lua als TLS |
Bouwen vanuit broncode
Vereist een stabiele Rust toolchain (Rust 1.89 of nieuwer).
git clone https://github.com/kividbio/kividb.git
cd kividb
cargo build --release # Default variant
cargo build --release --features lua # Met Lua-scripting
cargo build --release --features tls # Met TLS
cargo build --release --features lua,tls # Volledige versie
./target/release/kividb
Op Linux gebruikt de server io_uring indien het kernel dit toestaat, anders valt hij terug op Tokio.
Operationele details
Protected Mode
Standaard staat protected mode aan. Als er geen bind-adres is ingesteld en de standaardgebruiker heeft geen wachtwoord, kunnen alleen clients op dezelfde machine (loopback) verbinden.
Om verbindingen van andere machines toe te staan:
- Stel een wachtwoord in:
--requirepass <wachtwoord> of ACL SETUSER default ><wachtwoord>.
- Stel een bind-adres in:
--bind <adres>.
- Zet protected mode uit:
--protected-mode no.
Docker Gebruik
Images zijn beschikbaar op Docker Hub en GitHub Container Registry.
docker run -p 6380:6380 ghcr.io/kividbio/kividb --requirepass "change-me"
Voor AOF-persistentie (met volume mount):
docker run -p 6380:6380 \
-v $(pwd)/data:/home/kividb \
ghcr.io/kividbio/kividb --aof --requirepass "change-me"
Configuratie
KiviDB kan worden geconfigureerd via command-line vlaggen of een Redis-stijl configuratiebestand (/etc/kividb/kividb.conf).
Belangrijke vlaggen:
| Vlag | Standaard | Beschrijving |
--port | 6380 | Poort om op te luisteren |
--bind | 0.0.0.0 | Adres om op te luisteren (zet protected mode uit) |
--protected-mode | yes | Beveiligingsmodus voor onbeveiligde verbindingen |
--threads | 0 (auto) | Aantal worker threads |
--databases | 16 | Aantal databases |
--dir | start directory | Locatie voor dump.kdb en appendonly.aof |
--aof | off | Append-only file persistentie |
--maxmemory | 0 (unlimited) | Geheugenlimiet in bytes |
--maxmemory-policy | noeviction | Gedrag bij bereiken limiet (bijv. allkeys-lru) |
--loglevel | info | Log-niveau (debug, verbose, notice, warning, nothing) |
--io-model | auto | I/O model: auto, uring of tokio |
--requirepass | none | Wachtwoord voor de standaardgebruiker |
--cluster-enabled | no | Cluster mode inschakelen |
TLS (Transport Layer Security)
TLS-clients maken verbinding via een aparte poort (--tls-port), terwijl onversleuteld verkeer op --port blijft.
Voorbeeld startcommando:
./target/release/kividb --port 6380 --tls-port 6381 --tls-cert-file cert.pem --tls-key-file key.pem
Client verbinding:
redis-cli --tls -p 6381 --cacert ca.pem
Update Controle bij Opstarten
Bij het opstarten maakt een release-build van KiviDB één HTTPS-verzoek naar GitHub om te controleren of er een nieuwere versie beschikbaar is. Indien ja, wordt er een korte melding getoond. Er worden geen gegevens verzonden behalve het verzoek zelf met een User-Agent.
Dit kan worden uitgeschakeld via:
--update-check no in de command-line.
update-check no in het configuratiebestand.
KIVIDBNOUPDATE_CHECK=1 in de omgevingsvariabelen.
Licentie en Juridisch
KiviDB is open source software onder de GNU Affero General Public License v3 (AGPL-3.0-only).
- Gebruik in commerciële applicaties: U kunt KiviDB gebruiken als database voor een commerciële of closed-source applicatie. Omdat uw applicatie via het netwerk communiceert, wordt het niet beschouwd als een afgeleid werk van KiviDB en gelden de AGPL-verplichtingen niet voor uw applicatiecode.
- Modificaties: Als u KiviDB zelf wijzigt en deze gewijzigde versie via een netwerk aanbiedt (bijv. als een hosted service), moet u de broncode van uw wijzigingen beschikbaar stellen.
- Commerciële licentie: Voor organisaties die geen AGPL-software mogen gebruiken of KiviDB willen embedden zonder wijzigingen te publiceren, is er een commerciële licentie beschikbaar via
support@kividb.io.
FAQ
- Kan ik KiviDB gebruiken voor mijn commerciële app? Ja.
- Kan ik KiviDB als service aanbieden? Ja. Als u het ongewijzigd draait, hoeft u niets te publiceren. Bij modificaties moet de broncode van de server worden gedeeld.
- Tellen client-bibliotheken of configuraties als modificaties? Nee.
Merken
Redis® is een geregistreerd handelsmerk van Redis Ltd. KiviDB is niet gelieerd aan Redis Ltd.