Skip to main content
Cache-Pot is a drop-in Redis replacement for most use cases. It speaks RESP2 over the wire, so any Redis client library — ioredis, redis-py, go-redis, Lettuce, Jedis — connects and works without a single line of code changing. For the vast majority of apps that use Redis as a cache or key/value store, pointing the connection string at Cache-Pot is all you need to do.

What’s compatible

Cache-Pot implements all the command groups you rely on day-to-day:

Strings

GET, SET, MGET, MSET, INCR, APPEND, GETRANGE, and more

Hashes

HSET, HGET, HGETALL, HDEL, HMGET, HKEYS, HVALS, HLEN

Lists

LPUSH, RPUSH, LPOP, RPOP, LRANGE, LLEN, LINDEX

Sets

SADD, SREM, SMEMBERS, SISMEMBER, SCARD

Sorted Sets

ZADD, ZREM, ZSCORE, ZRANGE, ZRANGEBYSCORE, ZCARD

Pub/Sub

SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH

Transactions

MULTI, EXEC, DISCARD, WATCH, UNWATCH

Key Expiry

EXPIRE, PEXPIRE, EXPIREAT, TTL, PTTL, PERSIST

Iteration

SCAN, HSCAN, SSCAN, ZSCAN with MATCH and COUNT

Auth & Select

AUTH, SELECT 0, PING, QUIT, ECHO

Server

INFO, DBSIZE, FLUSHDB, SAVE, BGSAVE, BGREWRITEAOF

Observability

MONITOR, SLOWLOG, CLIENT LIST, CONFIG GET/SET

What’s different

Cache-Pot is honest about where it diverges from Redis. These differences only matter if your current setup uses the specific features listed below.
If you use Redis purely as a cache or key/value store, none of these differences will affect you.
FeatureRedisCache-Pot
Multiple databasesSELECT 0 through SELECT 15SELECT 0 only — SELECT 1+ returns an error
Clustering & replicationFull supportSingle-node only in v1
Protocol versionRESP2 and RESP3RESP2 only
RedisSearch / RedisJSON modulesAvailable as add-onsNot available — Cache-Pot has its own VSET/VSEARCH and SCACHE.* commands
If your application calls SELECT with a database index greater than 0, it will receive an error. Audit your codebase for SELECT usage before switching.

Migration steps

1

Install Cache-Pot

Install via Go, Docker, or build from source:
go install github.com/subh05sus/cache-pot/cmd/cache-pot@latest
cache-pot
Cache-Pot starts listening on :6379 by default — the same port Redis uses.
2

Export your data from Redis (if you need it)

Cache-Pot uses its own snapshot format, not Redis’s RDB format. If you have data in Redis that needs to carry over, export it using redis-cli and replay the writes:
# Dump a snapshot from your existing Redis instance
redis-cli --rdb dump.rdb

# Cache-Pot cannot load RDB files directly.
# Replay key writes using a script or redis-cli --pipe against Cache-Pot.
For a fresh start or when migrating only the connection (not the data), skip this step entirely.
3

Update your connection string

Point your application at Cache-Pot. If Cache-Pot is running locally on the default port, your connection string likely does not need to change at all:
# Most apps read this from an environment variable
export REDIS_URL=redis://localhost:6379
4

Configure authentication (if you use AUTH)

If your Redis instance requires a password, start Cache-Pot with the same password using --auth or the CACHEPOT_AUTH environment variable:
cache-pot --auth mysecretpassword

# Or via environment variable
CACHEPOT_AUTH=mysecretpassword cache-pot
5

Verify the connection

Confirm everything is working by connecting and running PING:
redis-cli -p 6379 PING
# Expected: PONG

redis-cli -p 6379 SET hello world
redis-cli -p 6379 GET hello
# Expected: "world"

Client library examples

No code changes are required — only the server address changes (and only if Cache-Pot is on a different host).
// Before: Redis
const Redis = require('ioredis');
const client = new Redis('redis://localhost:6379');

// After: Cache-Pot (no code change needed)
const client = new Redis('redis://localhost:6379'); // same!

// Everything works as before
await client.set('hello', 'world');
const value = await client.get('hello');
console.log(value); // "world"
Once you have migrated, explore Cache-Pot’s AI extensions. Vector search (VSET / VSEARCH) and semantic caching (SCACHE.SET / SCACHE.GET) are available with no additional setup — except an embedding endpoint for the semantic cache. They run through the same RESP2 connection your existing client already holds.