Skip to main content
Swytch Documentation
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Swytch vs Redis (OSS/Valkey)

Swytch’s Redis mode is 100% command-compatible with Redis. Same wire protocol, same commands, same ACL format, same clients. Your application doesn’t need to change.

What changes is the shape of the cluster underneath. Redis is a single primary with replicas. Swytch is leaderless: every node accepts reads and writes, every node replicates synchronously to its subscribers, and adding a region is adding a node. That architectural difference is what the rest of this page is about.

For the commercial multi-region product, see Swytch vs Redis (Enterprise).


The short version

Redis OSSSwytch
DeploymentStandalone server, primary + replicasSidecar or standalone binary, one or many nodes
NodesOne primary, N replicasOne or more, active-active
WritersOne primary at a timeEvery node, concurrently
Network needed?Yes, between server and clientsYes, between nodes; app-to-node is local
Wire protocolRESPv2 / RESPv3RESPv2 / RESPv3
Command setRedis commandsRedis commands, 100% compatible
ReplicationAsynchronous primary-replicaSynchronous to interested nodes
Partition handlingMinority side stalls or goes read-onlyBoth sides continue; non-transactional writes merge on heal
DurabilityDisk (RDB + AOF)In-memory across subscribed nodes by default; disk via Swytch Cloud
Write latency~microseconds (local) to ~ms (remote)~1 RTT to furthest subscriber
Read latency~microseconds (local or replica)~microseconds (local node, after subscription)
Operational surfaceSentinel / Cluster / Enterprise for HA and multi-regionOne binary, DNS-based membership
LicenseAGPLv3 / SSPL (dual)AGPL (open source) + commercial

Clustering and multi-region

The biggest architectural difference is how the two handle more than one node.

Redis OSS is designed around a single primary. Scaling reads means adding replicas that follow that primary asynchronously. Scaling writes means Redis Cluster: sharding keys across multiple primaries via hash-slot assignment, with each primary having its own replicas. Multi-region active-active isn’t available in OSS at all; it’s a Redis Enterprise feature.

Swytch’s clustering is leaderless. Every node is a peer; there are no hash slots, no primaries, no replicas. Nodes discover each other through DNS; point --join at a name that resolves to your cluster, and nodes find their way from there. Cluster traffic runs over QUIC with mutual TLS, authenticated by a shared passphrase. Adding a node is starting another binary and pointing it at the same DNS name. Removing a node is stopping it; the data is already on the other subscribers.

Multi-region works the same way as single-region, because the architecture doesn’t distinguish. Point a node in Frankfurt at the same DNS name as nodes in Sydney and Virginia, and the three regions form one active-active cluster. Every region accepts writes at local latency. Every region reads locally after subscribing. Replication is synchronous to the nodes that care about a given write (one RTT to the furthest subscriber, not to every node in the cluster).


Transactions

Redis MULTI/EXEC groups commands into an atomic execution unit but doesn’t isolate them. Other clients can write to the same keys mid-transaction; WATCH helps detect this, but catching it requires manual retry logic in the application and the isolation story is “optimistic, check-and-retry.”

Swytch’s MULTI/EXEC is a serializable transaction. When two transactions conflict, exactly one commits; the other fails cleanly. WATCH still works for the cases it’s useful for (check-and-act on a specific key), but it’s no longer load-bearing for isolation.

One deliberate behavior change is worth naming: commands inside MULTI return their actual values, not a QUEUED placeholder. Application code that parses for QUEUED during the transaction will need to adjust. The flip side is that most of the reasons you’d reach for Lua (getting intermediate values inside an atomic block, conditional logic based on read results, multi-step computations) are no longer Lua’s problem — they’re just a MULTI block that returns real values as it goes.

For applications that rely on MULTI/EXEC for correctness (counters that must not lose updates, stock decrements, rate limiters, any stateful operation where “this should be atomic” actually means it), this is a meaningful upgrade. For applications where MULTI/EXEC is used loosely or not at all, the difference doesn’t show up in day-to-day code.


Where each one fits

Reach for Redis OSS when:

  • You need Redis modules (RediSearch, RedisJSON, etc.); Swytch doesn’t support modules yet.
  • You rely on Lua cjson or cmsgpack; Swytch’s Lua support doesn’t include those libraries.
  • You’re running a single region and current Redis is working fine.
  • You have an operational preference for a dedicated cache tier separate from your application servers.

Reach for Swytch when:

  • You’re running multi-region and need active-active without Redis Enterprise.
  • You want simpler ops. No Sentinel, no sharding, just add servers.
  • You want to cut infrastructure costs by running on servers you already pay for. See Economics of Swytch for the math.

The one-paragraph summary

Swytch’s Redis mode is command-compatible with Redis OSS, which means the application code doesn’t change. The cluster underneath does: Redis is a primary-with-replicas model that scales through Cluster sharding and Sentinel-managed failover, while Swytch is leaderless, synchronous-to-subscribers, and active-active across regions by default. For applications running inside a single region with no transactional requirements beyond basic key-value operations, Redis OSS is battle-tested and fine. For applications that need multi-region, real MULTI/EXEC isolation, or just want to stop operating Sentinel and Redis Cluster, Swytch is what that looks like when the architecture is built for it from the ground up.