@Override
 public <D extends Document<?>> D getAndTouch(D document, long timeout, TimeUnit timeUnit) {
   return Blocking.blockForSingle(
       asyncBucket.getAndTouch(document).singleOrDefault(null), timeout, timeUnit);
 }
 @Override
 public <D extends Document<?>> D getAndTouch(
     String id, int expiry, Class<D> target, long timeout, TimeUnit timeUnit) {
   return Blocking.blockForSingle(
       asyncBucket.getAndTouch(id, expiry, target).singleOrDefault(null), timeout, timeUnit);
 }
 @Override
 public JsonDocument getAndTouch(String id, int expiry, long timeout, TimeUnit timeUnit) {
   return Blocking.blockForSingle(
       asyncBucket.getAndTouch(id, expiry).singleOrDefault(null), timeout, timeUnit);
 }