Most of the operations (set, touch, ...) can't fail. We'll do those last.
We'll first schedule the operations that can fail (cas, replace, add)
to minimize chances of another process overwriting those values in the
meantime.
But it could still happen, so we should fetch the current values for all
unsafe operations. If the transaction fails, we can then restore them.