1. In Redis, not all data is always stored in memory. This is the biggest difference compared with Memcached.
2. Redis not only supports simple k/v type data, but also provides storage of data structures such as list, set, and hash.
3. Redis supports data backup, that is, data backup in master-slave mode.
4. Redis supports data persistence, which can keep data in memory on disk and can be loaded again for use when restarting.
Redis has the characteristics of a database in many aspects, or is a database system, while Memcached is just a simple K/V cache
Let’s take a look at the Redis author comparing redis and memcache
Source: "Is memcached a dinosaur in comparison to Redis?" (Compared to Redis, is Memcached really outdated?)
You should not care too much about performances. Redis is faster per core with small values, but memcached is able to use multiple cores with a single executable and TCP port without help from the client. Also memcached is faster with big values in the order of 100k. Redis recently improved a lot about big values (unstable branch) but still memcached is faster in this use case. The point here is: nor one or the other will likely going to be your bottleneck for the query-per-second they can deliver.
There is no need to care too much about performance, because the performance of both is already high enough. Since Redis only uses a single core, while Memcached can use multiple cores, in comparison, on average, Redis on each core has higher performance when Memcached stores small data. For data of more than 100k, the performance of Memcached is higher than that of Redis. Although Redis has recently been optimized for the performance of storing big data, it is still slightly inferior to Memcached. Having said all this, the conclusion is that no matter which one you use, the number of requests processed per second will not become a bottleneck. (For example, the bottleneck may be the network card)
You should care about memory usage. For simple key-value pairs memcached is more memory efficient. If you use Redis hashes, Redis is more memory efficient. Depends on the use case.
If we want to talk about memory usage efficiency, if we use simple key-value storage, Memcached has higher memory utilization. If Redis uses hash structure for key-value storage, due to its combined compression, its memory utilization will be higher than Memcached. Of course, this depends on your application scenario and data characteristics.
You should care about persistence and replication, two features only available in Redis. Even if your goal is to build a cache it helps that after an upgrade or a reboot your data are still there.
If you have requirements for data persistence and data synchronization, it is recommended that you choose Redis, because Memcached does not have these two features. Even if you just hope that cached data will not be lost after upgrading or restarting the system, it is wise to choose Redis.
You should care about the kind of operations you need. In Redis there are a lot of complex operations, even just considering the caching use case, you often can do a lot more in a single operation, without requiring data to be processed client side (a lot of I/O is sometimes needed). This operations are often as fast as plain GET and SET. So if you don't need just GET/SET but more complex things Redis can help a lot (think at timeline caching).
Of course, in the end, you have to talk about your specific application requirements. Compared with Memcached, Redis has more data structures and supports richer data operations. Usually in Memcached, you need to get the data to the client to make similar modifications and then set it back. This greatly increases the number of network IOs and data volume. In Redis, these complex operations are usually as efficient as regular GET/SET. So, if you need the cache to support more complex structures and operations, then Redis would be a good choice.