Before you start: migrate from Upstash to KiviDB
On the database's page in the Upstash console, the Connect section shows the endpoint, the port and the password for the Redis protocol, and the REST URL…
Get the connection details
On the database's page in the Upstash console, the Connect section shows the
endpoint, the port and the password for the Redis protocol, and the REST URL
and token. The password for the Redis protocol is the same as the standard REST
token. Test the connection with valkey-cli or redis-cli (6.2 or later, built
with TLS):
export UPSTASH_URI='rediss://default:...@my-db-12345.upstash.io:6379'
redis-cli -u "$UPSTASH_URI" PING
Use the standard password, not the read-only one: Upstash restricts SCAN for
read-only credentials.
Check what the database uses
redis-cli -u "$UPSTASH_URI" INFO keyspace
redis-cli -u "$UPSTASH_URI" INFO memory | grep -E 'used_memory_human|maxmemory_policy'
redis-cli -u "$UPSTASH_URI" DBSIZE
INFO is not billed on Upstash; DBSIZE is one command.
| Check | Why it matters |
|---|---|
Your code calls eval, evalsha or scriptLoad, or uses @upstash/ratelimit, BullMQ or a lock library | These run Lua scripts. 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 |
| Eviction is on | Choose an eviction policy on KiviDB. optimistic-volatile picks keys at random, preferring keys with a TTL: volatile-random or allkeys-random are the nearest, allkeys-lru usually works better for a cache |
| Global database | Clients far from the primary region read from a nearer replica on Upstash; on KiviDB every client reaches the one region you choose |
| Edge or serverless functions (Vercel, Netlify, Cloudflare Workers) | Keep the REST API (Option A): these runtimes often can't hold a TCP connection |
blpop, subscribe or other blocking commands over REST | Upstash's REST API refuses them, and so does KiviDB's; over the Redis protocol both work |
Size it
Size KiviDB from the data size on the database's page, or used_memory_human,
plus headroom for growth; about 30% more is a reasonable start.