Skip to content
DocumentationTry Hanzo
In-memory data store

Hanzo KV

In-memory key-value store

Values live in memory, so a read is a network hop and a hash lookup — nothing waits on a disk. KV speaks RESP2 and RESP3 on port 6379, so the client library you already have connects to it. Reach for it for caches, sessions, rate limits, job queues and leaderboards.

RESP
2 and 3
Sentinel
Failover
AOF
Persistence
Cluster
Sharding

Pick a structure, not a schema

A leaderboard is a sorted set. A rate limit is a counter with an expiry. A queue is a list.

Nothing touches a disk

Reads and writes are answered out of memory, so the time you spend is the network and a hash lookup. That is the whole reason to put a cache in front of a database.

The structures do the work

Strings, hashes, lists, sets, sorted sets, streams, bitmaps, HyperLogLog and geospatial indexes — each with the commands that make sense for it. Lua scripts run several commands as one atomic step when a single command is not enough.

Pub/Sub

Publish to a channel and every subscriber has it, including subscribers matching a pattern like orders.*. Keyspace notifications turn a key expiring into a message something else can act on.

Keys that expire

Put a TTL on any key and it goes away by itself. When memory fills, you choose what leaves first — least recently used, least frequently used, shortest time to live, or only keys that already carry an expiry.

Two ways to survive a restart

An RDB snapshot writes the whole dataset on an interval; the append-only file records every write as it happens. Run either or both, and check a file before you trust it with kv-check-rdb and kv-check-aof.

ACLs on commands and keys

A user is granted specific commands and specific key patterns, so the service that only reads cache keys cannot reach FLUSHALL. TLS on the wire.

Any RESP client connects

cache.ts
import Redis from "ioredis"

const kv = new Redis("redis://kv.hanzo.ai:6379")

// Caching
await kv.set("user:123", JSON.stringify(user), "EX", 3600)
const cached = await kv.get("user:123")

// Rate limiting
const count = await kv.incr("ratelimit:api:usr_123")
await kv.expire("ratelimit:api:usr_123", 60)

// Pub/Sub
kv.subscribe("events")
kv.on("message", (channel, message) => {
  console.log(channel, message)
})
Open Source Revenue Sharing

Up to 5% of compute goes back to open source

Every deployment is SBOM-verified. Contributors to Valkey earn a share of compute revenue — transparent, on-chain, and customizable by the community.

Open Source Compute Dividends

Up to 5% of compute goes back to OSS authors

Every Hanzo deployment tracks software dependencies via SBOM. When your code powers compute on Hanzo, the authors get paid — automatically.

USDHanzo NetworkETHSOLUSDCmore

Put it in front of the database

Free tier includes 256 MB. Provision in seconds.

Open source

License: BSD-3-Clausehanzoai/kv

Get KV

Distributed key-value store