在REDIS CLI中执行时,下面的命令返回预期结果(将名称带有前缀' new alban '放置)。

127.0.0.1:6379> zrangebylex my_places_data_set“[新奥尔本”“[[新奥尔本 \ xff”

  • “新奥尔巴尼图片...”
  • “新奥尔巴尼p ...”
  • “新奥尔巴尼河...”

  • 但是,当使用jedis api调用此命令时,它不会为上述前缀返回任何结果,但会在我完成单词后返回。

    没有结果-管道。 zrangeByLex (my_places_data_set,“[新奥尔本”,“[新奥尔本 \ xff”,0,5);

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

    如果我使用xff而不是\ xff,则会发生以下情况

    没有结果-管道。 zrangeByLex (my_places_data_set,“[新奥尔本”,“[新奥尔本 xff”,0,5);

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

    返回结果-管道。 zrangeByLex (my_places_data_set,“[新奥尔巴尼”,“[新阿尔巴 xff”,0,5);

    附言Jedis api签名:zrangeByLex(字符串键,字符串最小值,字符串最大值,整数偏移量,整数计数)

    最佳答案

    我通过手动将十六进制代码附加到前缀来解决此问题

    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));
    

    10-08 14:17