Embedded Lua scripting, speed, customization, and ease of configuration. The fact that it takes less than 10 minutes to configure and spin up a perfectly working Redis instance is amazing. Compound that with high-availability provided by Sentinel and some of the other tools available to spin up a Redis "pod" and the possibilities are endless.
Lack of security. Despite the fact that a user can limit access to Redis with a simple AUTH password and limiting database access to only local networks, I feel that there could be a little bit better of a security implementation, especially considering Redis' wide adoption.
I found myself spending a lot of time searching for a decent SSO solution that was small, worked well with Nginx, and was quick. Eventually I gave up on the search and wrote my own and used Redis as a data store.
When I was spending time designing the session mechanism, some problems that always came up were expiration and session validation. In the sign-in process, a user is assigned a session token that maps to a hash of data in Redis. During sign-in, the SSO solution takes advantage of Redis' TTL and EXPIRE features to implement the session expiration. Because of this, the code got an extreme amount more simplistic. As far as validation goes, since it somewhat fits hand-in-hand with expiration, if the key expired or doesn't exist in Redis, the session is destroyed and the client is redirected.
With my SSO project, I really realized the true power of Redis. Its power and flexibility has drastically reduced the amount of code I had to write to achieve my goals.