java關於使用subList方法擷取的字串,放入redis快取的相關問題及解決方法
阿新 • • 發佈:2018-12-21
在前幾天做專案的時候,會對其他專案通過阿里雲發來的訊息中的某個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來獲取