Redis反序列化失敗的解決方法
什么是序列化和反序列化
序列化是將對(duì)象轉(zhuǎn)換為字符串以便存儲(chǔ)傳輸?shù)囊环N方式。而反序列化恰好就是序列化的逆過(guò)程,反序列化會(huì)將字符串轉(zhuǎn)換為對(duì)象供程序使用。在PHP中序列化和反序列化對(duì)應(yīng)的函數(shù)分別為serialize()和unserialize()。
問(wèn)題
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of org.springframework.security.core.authority.SimpleGrantedAuthority (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (byte[])"…
原序列化配置
@Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(factory); GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // 使用 StringRedisSerializer 來(lái)序列化和反序列化key 的值 redisTemplate.setKeySerializer(stringRedisSerializer); redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer); // hash的key也采用StringRedisSerializer 的序列化方式 redisTemplate.setHashKeySerializer(stringRedisSerializer); redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; }
修改配置
@Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(factory); // String的序列化 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // json序列化配置 GenericFastJsonRedisSerializer fastJsonRedisSerializer = new GenericFastJsonRedisSerializer(); // key采用String的序列化方式 redisTemplate.setKeySerializer(stringRedisSerializer); // value的序列化方式采用fastJson的方式 redisTemplate.setValueSerializer(fastJsonRedisSerializer); // hash的key也采用String 的序列化方式 redisTemplate.setHashKeySerializer(stringRedisSerializer); // hash的value序列化方式采用fastJson redisTemplate.setHashValueSerializer(fastJsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; }
解決方法
使用 GenericFastJsonRedisSerializer
替換 GenericFastJsonRedisSerializer
到此這篇關(guān)于Redis 反序列化失敗的解決方法的文章就介紹到這了,更多相關(guān)Redis 反序列化失敗內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows環(huán)境下查看、添加、修改redis數(shù)據(jù)庫(kù)的密碼兩種方式
在Windows系統(tǒng)上設(shè)置Redis密碼的過(guò)程與Linux系統(tǒng)類似,但需注意幾個(gè)關(guān)鍵步驟以確保正確配置,這篇文章主要給大家介紹了關(guān)于Windows環(huán)境下查看、添加、修改redis數(shù)據(jù)庫(kù)的密碼兩種方式,需要的朋友可以參考下2024-07-07Redis底層數(shù)據(jù)結(jié)構(gòu)SkipList的實(shí)現(xiàn)
本文主要介紹了Redis底層數(shù)據(jù)結(jié)構(gòu)SkipList的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Redis+threading實(shí)現(xiàn)多線程消息隊(duì)列的使用示例
Redis多線程消息隊(duì)列是一種使用Redis作為存儲(chǔ)后端的消息隊(duì)列實(shí)現(xiàn),它利用Redis的線程并發(fā)處理能力來(lái)提高消息隊(duì)列的處理效率,本文主要介紹了Redis+threading實(shí)現(xiàn)多線程消息隊(duì)列的使用示例,感興趣的可以了解一下2023-12-12詳解redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作
這篇文章主要介紹了詳解redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12SpringSession通過(guò)Redis統(tǒng)計(jì)在線用戶數(shù)量的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringSession通過(guò)Redis統(tǒng)計(jì)在線用戶數(shù)量,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04解析Redis 數(shù)據(jù)結(jié)構(gòu)之簡(jiǎn)單動(dòng)態(tài)字符串sds
Redis 的 string 類型為何使用sds而不是 C 字符串,本文主要介紹 string 的數(shù)據(jù)結(jié)構(gòu)—— 簡(jiǎn)單動(dòng)態(tài)字符串(Simple Dynamic String) 簡(jiǎn)稱sds的相關(guān)知識(shí),需要的朋友可以參考下2021-11-11Redis遠(yuǎn)程連接Redis客戶端的實(shí)現(xiàn)步驟
本文主要介紹了Redis遠(yuǎn)程連接Redis客戶端的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06