Before you start: migrate from DigitalOcean to KiviDB

You need valkey-cli (or redis-cli 6.2 or later, built with TLS) and, optionally, doctl, DigitalOcean's CLI.

Install the tools

You need valkey-cli (or redis-cli 6.2 or later, built with TLS) and, optionally, doctl, DigitalOcean's CLI.

Get the cluster's connection details

In the control panel, open the cluster and find Connection Details, or with doctl:

doctl databases list
doctl databases connection <cluster-id> --show

--show prints the password; without it, it is masked. Connections use TLS on port 25061:

valkey-cli --tls -h my-cache-do-user-1234567-0.db.ondigitalocean.com -p 25061 -a "$DO_PASSWORD" PING

Set a variable for the rest of this guide, with the URI from the connection details:

export DO_URI='rediss://default:...@my-cache-do-user-1234567-0.db.ondigitalocean.com:25061'

Let the copy machine in

The copy runs from a machine you control, best a Droplet in the cluster's region. If the cluster has trusted sources, add that machine:

doctl databases firewalls append <cluster-id> --rule droplet:<droplet-id>
# or an address
doctl databases firewalls append <cluster-id> --rule ip_addr:203.0.113.5

A Droplet in the same VPC can use the cluster's private hostname, which keeps the copy off the public network. KiviDB Cloud must also allow the machine: Configuration → Network → Allowed IPs.

Check what the cluster uses

valkey-cli -u "$DO_URI" INFO server | grep -E 'valkey_version|redis_version'
valkey-cli -u "$DO_URI" INFO keyspace
valkey-cli -u "$DO_URI" INFO memory | grep -E 'used_memory_human|maxmemory_human|maxmemory_policy'
valkey-cli -u "$DO_URI" INFO commandstats | grep -E 'eval|evalsha|fcall|function'

CONFIG GET is disabled. The cluster's settings are in the control panel under Settings → Advanced Configurations, or with doctl databases configuration get <cluster-id> --engine valkey.

CheckWhy it matters
valkey_version 9 or laterChanges how you move the data (below). New clusters run Valkey 9 by default
INFO keyspace lists db1, db2...RedisShake copies every database; RIOT copies one per run
cmdstat_eval, cmdstat_evalsha, cmdstat_fcallJob queues (BullMQ, Sidekiq) and lock libraries use Lua. KiviDB needs the lua or full build; on Cloud, turn on Lua scripting when you create the database. Default and free-tier Cloud databases have no Lua
maxmemory_policySet the same policy on KiviDB. Both default to noeviction
Search, JSON or other modules in your codeSearch, JSON, time series and vectors are built into KiviDB; there is no MODULE LOAD

Size it

Size KiviDB from used_memory_human, the data actually held, not from the plan's RAM: DigitalOcean gives Valkey 70% of a node's memory, and keeps more for replication and the system (a 1 GiB plan holds 0.5 GiB of data, a 4 GiB plan 2.5 GiB). Leave headroom on KiviDB for growth; about 30% more than used_memory is a reasonable start.

Pick the build

Your cluster usesSelf-hosted buildKiviDB Cloud
No Luatls (to keep TLS, as on DigitalOcean)TLS on
Lua (EVAL, FUNCTION)fullLua scripting and TLS