Here are a few examples of concrete usage of Redis on top of MongoDB.
Pre-2.2 MongoDB does not have yet an expiration mechanism. Capped
collections cannot really be used to implement a real TTL. Redis has a TTL-
based expiration mechanism, making it convenient to store volatile data. For
instance, user sessions are commonly stored in Redis, while user data will
be stored and indexed in MongoDB. Note that MongoDB 2.2 has introduced a low
accuracy expiration mechanism at the collection level (to be used for
purging data for instance).
Redis provides a convenient set datatype and its associated operations (
union, intersection, difference on multiple sets, etc ...). It is quite easy
to implement a basic faceted search or tagging engine on top of this
feature, which is an interesting addition to MongoDB more traditional
indexing capabilities.
Redis supports efficient blocking pop operations on lists. This can be used
to implement an ad-hoc distributed queuing system. It is more flexible than
MongoDB tailable cursors IMO, since a backend application can listen to
several queues with a timeout, transfer items to another queue atomically,
etc ... If the application requires some queuing, it makes sense to store
the queue in Redis, and keep the persistent functional data in MongoDB.
Redis also offers a pub/sub mechanism. In a distributed application, an
event propagation system may be useful. This is again an excellent use case
for Redis, while the persistent data are kept in MongoDB.