在REDIS CLI中执行时,下面的命令返回预期结果(将名称带有前缀' new alban '放置)。
127.0.0.1:6379> zrangebylex my_places_data_set“[新奥尔本”“[[新奥尔本 \ xff”
但是,当使用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));