Ok,
Redis and Memcache really solve the same problems. The main difference is that you can use redis as a session cache for django (save the session objects to memory instead of the database), which I haven't found a solution for memcache yet. Also redis CAN be persisted (saved to disk), if you setup your own redis server.
But otherwise, you can use both memcache and redis for your cache. Examples where a cache can be useful:
1. You want to do a complex database query that takes a long time to run, but doesn't update often. Just cache the results and use the result if it is present.
2. You can also cache the result of a view. If the view takes a long time to render AND is the same for all users, then cache the entire view result.
3. There is also the possibility to create portions of a template and cache just those portions.
Thats what I can think of off the top of my head. You can find more information about it here:
The main thing to remember is that both memcache and redis are in memory databases (key-value store) (even though redis can be persisted) and if the server is rebooted, then the cache is empty. Also being a in memory database means that getting information back from the key-value store is more or less instantanious especially if you compare to a standard sql database.
Regards,
Andréas