Keydb.cfg
Without maxmemory , KeyDB will keep growing until system memory is exhausted. 9. Replication | Directive | Default | Description | |-----------|---------|-------------| | replicaof | (none) | replicaof <masterip> <masterport> | | masteruser | (none) | ACL user for replication (KeyDB 6+). | | replica-serve-stale-data | yes | Serve stale data when disconnected from master. | | replica-read-only | yes | Replica accepts only reads. | | repl-diskless-sync | no | Transfer RDB directly to replicas (no disk). | | repl-diskless-sync-delay | 5 | Wait for more replicas before sync. | | repl-backlog-size | 1mb | Backlog for partial resync. | | min-replicas-to-write | 0 | Minimum replicas online to accept writes. | | min-replicas-max-lag | 10 | Max lag (seconds) for above condition. | 10. KeyDB-Specific Replication Enhancements | Directive | Default | Description | |-----------|---------|-------------| | active-replica | no | Allow replica to accept writes (multi-master-like). | | active-replica-lag | 100 | Max acceptable lag for active replica writes. |
Increasing server-threads improves throughput on multi-core systems but may increase complexity. Start with cores/2. 5. General Operational Directives | Directive | Default | Description | |-----------|---------|-------------| | daemonize | no | Run as background process. | | pidfile | /var/run/keydb.pid | PID file location. | | loglevel | notice | Levels: debug, verbose, notice, warning. | | logfile | "" | Log file path. Empty = stdout. | | syslog-enabled | no | Log to syslog. | | databases | 16 | Number of logical databases. | | always-show-logo | no | Show KeyDB logo on startup. | | supervised | no | Integration with systemd/upstart. | 6. Persistence Options KeyDB supports both RDB snapshots and AOF (Append-Only File), exactly like Redis. 6.1 RDB (Snapshotting) | Directive | Example | Meaning | |-----------|---------|---------| | save | save 900 1 | Save if ≥1 key changed in 900 sec. | | save | save 300 10 | Save if ≥10 keys changed in 300 sec. | | stop-writes-on-bgsave-error | yes | Stop writes if background save fails. | | rdbcompression | yes | Compress string objects using LZF. | | rdbchecksum | yes | CRC64 checksum at end of RDB. | | dbfilename | dump.rdb | RDB file name. | | dir | ./ | Directory for RDB/AOF files. | 6.2 AOF (Append-Only File) | Directive | Default | Description | |-----------|---------|-------------| | appendonly | no | Enable AOF persistence. | | appendfilename | appendonly.aof | AOF file name. | | appendfsync | everysec | always , everysec , no . | | no-appendfsync-on-rewrite | no | Avoid fsync during rewrite. | | auto-aof-rewrite-percentage | 100 | Trigger rewrite if file grows 100%. | | auto-aof-rewrite-min-size | 64mb | Minimum size for rewrite. | | aof-load-truncated | yes | Load truncated AOF (on crash recovery). | | aof-use-rdb-preamble | yes | Use RDB at start of AOF (hybrid format). | keydb.cfg
These settings balance memory vs. CPU. Larger values = less memory but slower access. | Directive | Default | Description | |-----------|---------|-------------| | tls-port | 0 | TLS port (enable by setting >0). | | tls-cert-file | (none) | Server certificate. | | tls-key-file | (none) | Private key. | | tls-ca-cert-file | (none) | CA certificate for client auth. | | tls-auth-clients | yes | Require client certificates. | | tls-protocols | "TLSv1.2 TLSv1.3" | Allowed protocols. | | tls-ciphers | (default) | Cipher suite. | 16. Sample Production Configuration # Network bind 10.0.0.10 port 6379 tcp-keepalive 300 timeout 300 Threading (16-core machine) server-threads 8 server-thread-affinity 0-7 io-threads 4 Security requirepass your_strong_password rename-command FLUSHALL "" rename-command FLUSHDB "" Persistence save 900 1 save 300 10 appendonly yes appendfsync everysec auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 128mb Memory maxmemory 8gb maxmemory-policy allkeys-lru maxmemory-samples 10 Replication (replica) replicaof 10.0.0.11 6379 masterauth your_strong_password Misc daemonize yes loglevel notice logfile /var/log/keydb/keydb.log slowlog-log-slower-than 10000 17. Common Misconfigurations & Pitfalls | Issue | Symptom | Fix | |-------|---------|-----| | bind 127.0.0.1 in Docker | Containers can’t connect | Bind to 0.0.0.0 or use --network host . | | protected-mode yes + no password + public IP | Remote connections rejected | Set requirepass or bind to internal IP. | | server-threads > cores | Context switching overhead | Set ≤ physical cores. | | maxmemory not set | OOM killer may kill KeyDB | Always set maxmemory . | | appendfsync always | Poor write performance | Use everysec unless absolutely necessary. | | replicaof with active-replica | Data inconsistency | Understand conflict resolution first. | 18. Monitoring & Validation Commands After configuring keydb.cfg , use: Without maxmemory , KeyDB will keep growing until
For production, bind to specific internal IPs, enable keepalive, and set a reasonable timeout. 4. Threading Model (KeyDB-Specific) This is the core differentiator from Redis. | | replica-serve-stale-data | yes | Serve stale
| Directive | Default | Description | |-----------|---------|-------------| | lazyfree-lazy-eviction | no | Use async free on eviction. | | lazyfree-lazy-expire | no | Use async free on key expiry. | | lazyfree-lazy-server-del | no | Replace DEL with UNLINK . | | replica-lazy-flush | no | Async flush on replica sync. | | Directive | Default | Description | |-----------|---------|-------------| | slowlog-log-slower-than | 10000 | Microsecond threshold. 0 = all, -1 = off. | | slowlog-max-len | 128 | Max number of slow entries to keep. | 14. Advanced Data Structure Tuning | Directive | Default | Description | |-----------|---------|-------------| | hash-max-ziplist-entries | 512 | Convert hash to ziplist under this many entries. | | hash-max-ziplist-value | 64 | Max size of hash entry value for ziplist (bytes). | | list-max-ziplist-size | -2 | List quicklist ziplist size. | | set-max-intset-entries | 512 | Max integer set entries before conversion. | | zset-max-ziplist-entries | 128 | Max sorted set entries for ziplist. | | zset-max-ziplist-value | 64 | Max value size for ziplist. | | stream-node-max-bytes | 4096 | Max bytes per stream listpack node. | | stream-node-max-entries | 100 | Max entries per stream node. |
| Directive | Default | Description | |-----------|---------|-------------| | server-threads | 2 | Number of threads for handling client requests. | | server-thread-affinity | (none) | CPU core binding for server threads (e.g., 0-3 ). | | io-threads | 1 | Threads for I/O operations (reads/writes). | | io-threads-do-reads | no | Whether I/O threads also handle read commands. | | async-flush | no | Perform flush operations asynchronously. | | async-flush-threads | 4 | Threads for async flush. |