Limits and gotchas: migrate from KeyDB to KiviDB

or sorted-set member is dropped by every method: the member arrives without an expiry and stays. Re-apply it after the move (HEXPIRE for hash fields), or…

What does not come across

  • Subkey expiry. Expiry set with EXPIREMEMBER on a set member, hash field or sorted-set member is dropped by every method: the member arrives without an expiry and stays. Re-apply it after the move (HEXPIRE for hash fields), or clean those members up in the application.
  • Active replication and multi-master. KiviDB has one writable primary per shard.
  • FLASH. KiviDB keeps the dataset in memory.
  • KEYDB.* commands and KEYDB.CRON jobs. Run scheduled work outside the database.
  • Module data and search indexes, as for Redis.

Gotchas

  • MIGRATE, RedisShake scan_reader and RIOT without --struct all fail with ERR Bad data format: KeyDB's DUMP payloads carry an mvcc-tstamp field that Redis's don't.
  • Replicating from an active replica looks healthy (master_link_status:up) while every write after the full sync is refused. Check KiviDB's log for RREPLAY, and run the verify script after writing a test key.
  • RedisShake sync_reader from KeyDB needs Lua on the target.
  • Tested with KeyDB 6.3.4: replication, RDB file, --preload-file, RedisShake sync_reader into the full build and RIOT --struct, with every core data type, TTLs, streams with consumer groups, and a second logical database.