No benchmarks on this page. Hardware and workloads vary too much for a vendor’s chart to mean anything. These are architectural properties — true or false by construction, verifiable from the documentation and the source.
Each row is true or false by construction. Verify any of them from the docs, the specs, or the source.
| Property | Redis Cluster | CockroachDB | Spanner | Swytch |
|---|---|---|---|---|
| Leaderless writes | no | no | no | yes |
|
Local writes per region
no cross-region RTT |
replica only | quorum rtt | 2-phase commit | yes |
| Exactly-once delivery in the data plane | no | no | no | yes |
|
Deterministic conflict resolution
not last-writer-wins by clock |
lww | yes | yes | yes |
|
Keeps writing during a partition
Swytch default: minority blocks |
one side only | minority blocks | minority blocks | optional per prefix |
| No GPS / atomic-clock dependency | yes | yes | needs truetime | yes |
|
TLA+ verified
public specs |
no | internal | internal | public |
|
Jepsen tested
reproducible suite |
historical | yes | no public suite | yes |
| Redis 8 wire compatible | native | no | no | yes |
|
Self-hosted OSS tier
unlimited nodes |
bsd/rsal | bsl | managed only | agpl |
Vendor tables — including this one — are a starting point, not a conclusion. Because Swytch speaks the Redis wire protocol, running it against your own workload is a hostname change, not a migration project.
Stand up a node, point a staging client at it, and check the rows above against what you observe.
# your existing code, unchanged
import redis
r = redis.Redis(host="swytch.prod.internal", port=6379)
r.set("session:user_42", token)
r.xadd("events", {"kind": "login"})
Same wire protocol, same port, same client.
The specs are public, the Jepsen suite is reproducible, and the binary is a brew install away.
Comparing for a decision doc? Drop your address and we’ll send the claim-by-claim sources.