Limits and gotchas: migrate from Amazon ElastiCache to KiviDB

(ERR key must be valid UTF-8), and RIOT stops at the first one. Before the copy, look for binary key names: redis-cli --scan | python3 -c "import sys…

  • Key names must be valid UTF-8. KiviDB refuses a key whose name is not (ERR key must be valid UTF-8), and RIOT stops at the first one. Before the copy, look for binary key names: redis-cli --scan | python3 -c "import sys; [print(l, end='') for l in sys.stdin.buffer if not l.decode('utf-8','ignore').encode()==l]" | head (use --tls, --user and --pass as for your source). Rename them in the source first.
  • Valkey 9.0 and later. Neither the backup file nor DUMP payloads load into KiviDB 1.2.0; use RIOT --struct, which leaves stream consumer groups and hash field TTLs behind.
  • Writes after the backup. An exported backup is a point-in-time copy.
  • Keyspace notifications miss FLUSHALL and FLUSHDB. Don't run them on the source during a ksn copy.
  • Serverless cannot follow changes (no PSUBSCRIBE): freeze writes for the copy, or rebuild the cache in KiviDB.
  • Data tiering clusters cannot export a backup: copy over commands.
  • IAM users have no KiviDB equivalent; give the application a password.
  • Global Datastore and MemoryDB Multi-Region do not come across; copy from the primary region.
  • Index definitions for vector search are not in the backup; run FT.CREATE again, and it indexes the keys already there.
  • RedisShake does not check the server's TLS certificate: the traffic is encrypted, but it does not verify who it talks to. Run it inside your VPC.
  • ElastiCache sets notify-keyspace-events only through a parameter group. Remember to set it back afterwards.
  • Lua. If the application uses EVAL, EVALSHA or FUNCTION, KiviDB needs Lua (the lua or full build, or Lua scripting on in KiviDB Cloud). The default build answers those commands with an error.