code: @Override
    public byte[] substr(final byte[] key, final int start, final int end) {
      checkIsInMultiOrPipeline();
      client.substr(key, start, end);
      return client.getBinaryBulkReply();
    }
docs: Return a subset of the string from offset start to offset end (both offsets are inclusive).
  Negative offsets can be used in order to provide an offset starting from the end of the string.
  So -1 means the last char, -2 the penultimate and so forth.
  <p>
  The function handles out of range requests without raising an error, but just limiting the
  resulting range to the actual length of the string.
  <p>
  Time complexity: O(start+n) (with start being the start index and n the total length of the
  requested range). Note that the lookup part of this command is O(1) so for small strings this
  is actually an O(1) command.
  @param key
  @param start
  @param end
  @return Bulk reply