Two steps, often confused
One Redis process caps out at one machine's memory and roughly a hundred thousand operations a second. Growing past either limit takes two distinct steps, and conflating them is a common design error.
Replicate first, which copies the same data to more machines. Replicas connect to the primary and receive a stream of writes asynchronously.
Weigh that word asynchronously, because it is load-bearing. Your primary acknowledges a write before any replica has it, so losing the primary can lose acknowledged writes, and a read served by a replica can be milliseconds behind.
Take read capacity in exchange, and more importantly a warm standby.
Give failover a coordinator, and Sentinel is that. Its processes watch the primary, agree by majority that it is gone, promote a replica, and tell your clients the new address. Expect failover to take tens of seconds.
Splitting the data
Split the data second, with Cluster, once it no longer fits one primary. The keyspace divides into 16,384 slots, each node owns a range, and every key hashes to exactly one slot.
Let your clients learn the map and route each command to the right node, with a node that receives a misplaced key answering with the correct address.
Each shard carries its own replicas, so a cluster is really several replicated groups behind one keyspace.
Pay the visible cost of sharding. Commands touching several keys at once only work when those keys live in the same slot.
Force that with hash tags, where only the braced part of a key is hashed, pinning one user's keys together. Design your key names for this before you shard, not after.
Take the sizing advice that falls out. A primary with replicas and a coordinator covers most teams for years. Reach for Cluster when your working set outgrows one machine's memory or your writes outgrow one primary, and not before, because those multi-key restrictions are a real tax on your application code.
Worked example
Oscar's social app runs one Redis primary with two replicas for its session and feed caches, 60 GB of data on 128 GB machines, comfortable. Two years of growth later the working set hits 200 GB and the eviction rate on hot feed data is hurting the hit rate. He migrates to Redis Cluster with 6 shards, each a primary and replica pair, about 35 GB per shard. The migration surfaces exactly one class of bug: a feed endpoint that used a single MGET across 30 users' profile keys, which now span shards and fail. The team applies hash tags so each user's own keys stay colocated, and rewrites the cross-user MGET as parallel per-shard fetches, adding about 1 ms. Failovers are now automatic per shard; a node loss in month three goes unnoticed by users entirely.