A quick scan through there doesn't show anything hugely new and exciting, but a lot of good, solid improvements, all packaged up in a in a stable release.
2.2 was exactly an "optimization" release, to bring what we had at a better level of maturity.
Basically we'll try hard to don't add things to the API in the next releases, but just to open to new use cases changing the "backend" part, with cluster support for large fault tolerant deployment, and with diskstore for "bigdata".
However there are a few important new things in Redis 2.2 from the point of view of the features, I think the main ones are:
* non blocking replication, so that now slaves are able to serve data even when trying to resync with the master.
* Check and Set with WATCH.
* Write operations against keys with an expire set.
* LRU eviction of keys in 'maxmemory' mode.
* Support for SETBIT/GETBIT/SETRANGE/GETRANGE, basically this turn the string data type into a random access array.
The ziplist/zipmap optimization is excellent too. I took some sample data in Redis 2.0 and 2.2 and saw that Redis 2.2 used 1/5th the memory. Though, I was storing just lists of integers. See http://redis.io/topics/memory-optimization for more.
It's definitely a worthwhile upgrade for those of us running it in production in demanding environments. Many of the memory optimizations alone will make upgrading worth it.
Among the most interesting changes are the new expiry semantics (you can now reasonably expire compound values like lists and sets; previously if you appended to a list with an expiry set, it would first clear the list), and the WATCH command [1] which lets you construct atomic operations out of sequences of commands.
I have been using Redis in different projects during more than a year now and Redis has become a part of my standard "stack".
It's a good hammer, thanks to it's list-set-hashes-etc support.