Jedis zrangWithScores结果直接打印是ASCII码的值的问题

Jedis zrangWithScores结果直接打印是ASCII码的值的问题

 在使用jedis的zrangeWithScores获得redis的zset时,如果直接打印出来其中的element是一个byte数组,并且打印出来的是ASCII码的值:


看了一下该方法的返回值是一个Set,所以就逐个打印出Set的中的元素,发现还是一个member的值还是一个数组:

仔细看了该方法的返回值发现泛型是Tuple的,所以点进去看了一下,发现该类由一个私有成员是byte类型的数组:

接着发现该类重写了toString方法,里面使用了Arrays.toString方法,再点进去看一下:


可以看到该方法使用了一个StringBuilder类型的变量,使用一对[],把数组中的每一个元素在加进去然后把该变量变成String返回,和我们运行结果中看到的输出格式完全一致,两对[],前面一对[]里面是集合中的元素也就是byte数组,后面是score的值。

此外在Tuple类中发现由方法把byte数组转换成String:

看一下encode方法:

看到这明白了这个方法是把字节数据变成它对应的UTF-8编码的字符数据,所以使用该方法我们就能打印出设置集合member值的值:

    最后注意到了以WithScores结尾的方法返回类型都是Set,而另外一些获得集合member的方法返回值类型是Set类型的,前者直接打印的结果和设置值的时候的值不一致,需要使用getElement方法把字节数据转换成字符数据,而后者由于泛型是String类型的,可以直接打印,结果和设置集合值的时候一致

你可能感兴趣的:(java,redis)