1. 程式人生 > >java關於使用subList方法擷取的字串,放入redis快取的相關問題及解決方法

java關於使用subList方法擷取的字串,放入redis快取的相關問題及解決方法

    在前幾天做專案的時候,會對其他專案通過阿里雲發來的訊息中的某個List型別的欄位進行擷取,並將擷取後的結果存入redis中。但是在專案執行起來的時候,獲取redis中該欄位的內容會出現錯誤,錯誤提示如下:

(error) WRONGTYPE Operation against a key holding the wrong kind of value

上面的提示,表明該key對應的value有髒資料,於是開啟rdm客戶端,檢視開發環境的redis內容,發現該key之對應的value值最上面的值型別那個欄位不是ArrayList,而是ArrayList&subList(大概是這樣的),才意識到,應該是擷取字串向redis中儲存的時候出了問題。

 

    後來瞭解到,如果講擷取後的list還是賦值給原來的list,就會出現如上的錯誤。ArrayList&subList表明,是將list擷取後的結果存入了redis。用get key取內容的時候是取不出來的。

List<String> str = new ArrayList<>(); 
str = str.subList(0, 5);
redisTemplate.save(str);

    解決辦法如下:講擷取後的字串重新賦值給新的list,然後進行儲存

List<String> list = new ArrayList<>();
list = list.subList(0, 5);

List<String> newList = new ArrayList<>();
newList.addAll(list);

redisTemplate.save(newList);

    注意:如果你存入redis的value是個set集合,那麼使用smembers key來獲取