code: function(k, v, opts) {
          var ctx = u.context(MEDIUM);
          logger.debugl(function() { return ['Invoke put(msgId=%d,key=%s,value=%s,opts=%s)',
                                             ctx.id, u.str(k), u.str(v), u.str(opts)]; });
          var decoder = p.decodePrevOrElse(opts, p.hasSuccess, p.complete(_.constant(undefined)));
          return futureKey(ctx, 0x01, k, p.encodeKeyValue(k, v), decoder, opts);
        }
docs: A String formatted to specify duration unit information.
  Duration unit is formed of two elements, the first is the number of
  units, and the second is the unit itself: 's' for seconds, 'ms' for
  milliseconds, 'ns' for nanoseconds, 'μs' for microseconds, 'm' for
  minutes, 'h' for hours and 'd' for days.
  So, for example: '1s' would be one second, '5h' five hours...etc.
  
  @typedef {String} DurationUnit
  @since 0.3
   
  Store options defines a set of optional parameters that can be
  passed when storing data.
  
  @typedef {Object} StoreOptions
  @property {Boolean} previous - Indicates whether previous value
  should be returned. If no previous value exists, it would return
  undefined.
  @property {DurationUnit} lifespan -
  Lifespan for the stored entry.
  @property {DurationUnit} maxIdle -
  Max idle time for the stored entry.
  @since 0.3
   
  Associates the specified value with the given key.
  
  @param k {(String|Object)} Key with which the specified value is to be associated.
  @param v {(String|Object)} Value to be associated with the specified key.
  @param opts {?StoreOptions} Optional store options.
  @returns {module:promise.Promise.<?(String|Object)>}
  A promise that will be completed with undefined unless 'previous'
  option has been enabled and a previous value exists, in which case it
  would return the previous value.
  @memberof Client#
  @since 0.3