Jedis zrangWithScores結果直接打印是ASCII碼的值的問題

Jedis zrangWithScores結果直接打印是ASCII碼的值的問題redis

在使用jedis的zrangeWithScores得到redis的zset時,若是直接打印出來其中的element是一個byte數組,而且打印出來的是ASCII碼的值:


看了一下該方法的返回值是一個Set,因此就逐個打印出Set的中的元素,發現仍是一個member的值仍是一個數組:

數組

仔細看了該方法的返回值發現泛型是Tuple的,因此點進去看了一下,發現該類由一個私有成員是byte類型的數組:ui

接着發現該類重寫了toString方法,裏面使用了Arrays.toString方法,再點進去看一下:編碼


能夠看到該方法使用了一個StringBuilder類型的變量,使用一對[],把數組中的每個元素在加進去而後把該變量變成String返回,和咱們運行結果中看到的輸出格式徹底一致,兩對[],前面一對[]裏面是集合中的元素也就是byte數組,後面是score的值。spa

此外在Tuple類中發現由方法把byte數組轉換成String:
3d

看一下encode方法:code

看到這明白了這個方法是把字節數據變成它對應的UTF-8編碼的字符數據,因此使用該方法咱們就能打印出設置集合member值的值:blog

最後注意到了以WithScores結尾的方法返回類型都是Set<Tuple>,而另一些得到集合member的方法返回值類型是Set<String>類型的,前者直接打印的結果和設置值的時候的值不一致,須要使用getElement方法把字節數據轉換成字符數據,然後者因爲泛型是String類型的,能夠直接打印,結果和設置集合值的時候一致
相關文章
相關標籤/搜索