使用jedis api在redis上执行ZRANGEBYLEX命令不会返回任何结果

时间:2015-09-28 14:46:31

标签: redis jedis

在REDIS CLI中执行时,命令返回预期结果(将名称前缀为“ new alban ”)。

127.0.0.1:6379> zrangebylex my_places_data_set“[new alban”“[ new alban \ xff”

  1. “new albany f ......”
  2. “new albany p ...”
  3. “new albany r ......”
  4. 但是当使用jedis api调用此命令时,它不会返回上述前缀的任何结果,但如果我完成该单词则返回。

    无结果 - 管道。 zrangeByLex (my_places_data_set,“[new alban”,“[ new alban \ xff”,0,5);

    返回结果 - 管道。 zrangeByLex (my_places_data_set,“[new albany”,“[ new albany \ xff”,0,5);

    如果我使用xff代替\ xff发生

    无结果 - 管道。 zrangeByLex (my_places_data_set,“[new alban”,“[ new alban xff”,0,5);

    返回结果 - 管道。 zrangeByLex (my_places_data_set,“[new albany”,“[ new albany xff”,0,5);

    返回结果 - 管道。 zrangeByLex (my_places_data_set,“[new albany”,“[ new alba xff”,0,5);

    P.S。 Jedis api签名: zrangeByLex(String key,String min,String max,int offset,int count)

1 个答案:

答案 0 :(得分:1)

我通过手动将十六进制代码附加到前缀

来解决了这个问题
byte[] prefixByte = ("[" + prefix).getBytes();
byte[] prefixByteExtended = Arrays.copyOf(prefixByte, prefixByte.length + 1);
prefixByteExtended[prefixByte.length] = (byte) 0xFF;
pipeline.zrangeByLex(my_places_data_set, ("[" + prefix), new String(prefixByteExtended), 0, 5));