Here are a couple of example projects for info.

Django:

http://docs.djangoproject.com/en/dev/topics/cache/

It says of "increment/decrement": "incr()/decr() methods are not
guaranteed to be atomic. On those backends that support atomic
increment/decrement (most notably, the memcached backend), increment
and decrement operations will be atomic. However, if the backend
doesn't natively provide an increment/decrement operation, it will be
implemented using a two-step retrieve/update."

add() is implied to be atomic.

Django itself does use add() in exactly one line of code that I can
find. I believe it is just an optimization (don't bother saving this
object if it already exists) and is not semantically meaningful. In
fact, I don't believe that there is a code path to the add() call but
I'm really not investigating very deeply.

FWIW, I added the atomic increment/decrement operations to the Django cache interface (and wrote that documentation) because the functionality was useful for large scale apps. I didn't implement atomic increment/decrement or atomic add for backends that didn't natively support it because, in my opinion (and in the opinion of the other Django contributors) any site that requires that sort of functionality should be running memcached as their cache backend. So I guess what I'm saying is that the functionality _is_ useful. However, there probably are some users who would find the subset of the memcache protocol that you _can_ implement on top of Cassandra useful.

Meh.

Mike