redis: fix bug that can result in buckets w/o ttl

If a bucket expires in between the failed call to `SETNXEX` (failed
because the bucket exists) and the call to `INCRBY, we could `INCRBY` an empty
bucket, resulting in a bucket that has no TTL and will never get a TTL.

`INCRBY` is atomic, so if the result of `INCRBY` is the same as the amount
to be incremented by (usually 1), we know with 100% certainty that we
just created a new bucket and should set the expiration on the bucket.
Unrelated to the race condition, but no reason to open a connection to redis if we don't need one