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

KenmerkKiviDBRedis 8Valkey 8DragonflyKeyDB
LicentieAGPL-3.0RSALv2, SSPLv1 of AGPL-3.0BSD-3-ClauseBSL 1.1BSD-3-Clause
TaalRustCCC++C++
ArchitectuurElke 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.\*)IngebouwdIngebouwd (Query Engine)Separate moduleIngebouwdNee
Lua-scriptingLua buildJaJaJaJa

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).

MetriekKiviDB 1.1.0Dragonfly 2.0.2Redis 8.10Redis Cluster (32 shards)
GET, pipeline 16 (ops/s)21.2M9.1M2.4M4.7M
SET, pipeline 16 (ops/s)19.2M8.5M2.0M4.7M
GET, geen pipelining (ops/s)3.07M3.35M1.32M1.46M
SET, geen pipelining (ops/s)3.12M3.38M1.54M1.46M
p99 latentie, GET / SET (ms)0.36 / 0.420.88 / 1.072.2 / 2.7-
Geheugen per key177 B134 B178 B183 B

Vector search prestaties

Getest op glove-25-angular (1.18M vectoren, 25 dimensies) met HNSW.

MetriekKiviDB 1.1.0Dragonfly 2.0.2Redis 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 12850.7k (0.961)40.3k (0.937)28.9k (0.937)
Queries/s bij ef 25631.5k (0.989)36.2k (0.979)21.1k (0.979)
Queries/s bij ef 51218.7k (0.998)29.8k (0.995)13.7k (0.995)
Ingest en index build tijd31 s13 s38 s
Geheugen na ingest1.66 GB1.13 GB1.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

  1. 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 ``

  1. Vectoren opslaan:

Sla vectoren op als ruwe FLOAT32 little-endian bytes in een hash-veld (DIM × 4 bytes).

  1. 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:

VariantCargo featuresToevoegingen
DefaultGeenDe core server, zonder Lua of TLS
LualuaLua-scripting (EVAL, EVALSHA, SCRIPT, etc.)
TLStlsTLS listener en TLS tussen cluster-nodes en replica's
Fulllua, tlsZowel 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:

VlagStandaardBeschrijving
--port6380Poort om op te luisteren
--bind0.0.0.0Adres om op te luisteren (zet protected mode uit)
--protected-modeyesBeveiligingsmodus voor onbeveiligde verbindingen
--threads0 (auto)Aantal worker threads
--databases16Aantal databases
--dirstart directoryLocatie voor dump.kdb en appendonly.aof
--aofoffAppend-only file persistentie
--maxmemory0 (unlimited)Geheugenlimiet in bytes
--maxmemory-policynoevictionGedrag bij bereiken limiet (bijv. allkeys-lru)
--loglevelinfoLog-niveau (debug, verbose, notice, warning, nothing)
--io-modelautoI/O model: auto, uring of tokio
--requirepassnoneWachtwoord voor de standaardgebruiker
--cluster-enablednoCluster 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.