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<Tuple>,而另外一些獲得集合member的方法返回值類型是Set<String>類型的,前者直接打印的結果和設置值的時候的值不一致,需要使用getElement方法把字節數據轉換成字符數據,而後者由於泛型是String類型的,可以直接打印,結果和設置集合值的時候一致