The biggest lesson that I think that most need is that Redis is a very sharp knife. It is perfect for some problems, and a horrible fit for others. Understanding what it is for is critical to having it work out well for you.
Redis pushes the limit of what can be accomplished using a single-threaded in memory data store. If your processing can be done by such a thing, Redis is probably the most efficient option available. (With, of course, persistence, replication, and so on for managing your data.)
But if you throw blocking operations or too much data at it, Redis is going to demonstrate the inherent limitations that come with being a single-threaded in memory data store.
How about adding something about this in the documentation, if you haven't already?
- Do use Redis for <X>
- Do NOT use Redis for <Y>