Durability through replication should probably be mentioned as well; either to address performance requirements, or to provide stronger durability against hardware failure.
The upside of the design is that it makes things simple (e.g., transactions, append only file).
(This is my understanding, please correct me if I'm wrong!)
However there are people that turn Redis async replication into synchronous replication with a trick: they perform:
MULTI
SET foo bar
PUBLISH foo:ack 1
EXEC
Because PUBLISH is propagated to the slave if they are listening with another connection to the right channel they'll get the ACK from the slave once the write reached the slave. Not always practical but it's an interesting trick.