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<Tuple>,而另外一些獲得集合member的方法返回值類型是Set<String>類型的,前者直接打印的結果和設置值的時候的值不一致,需要使用getElement方法把字節數據轉換成字符數據,而後者由於泛型是String類型的,可以直接打印,結果和設置集合值的時候一致
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章