springboot整合spring-data-redis遇到的坑
描述
使用springboot整合redis,使用默認(rèn)的序列化配置,然后使用redis-client去查詢時(shí)查詢不到相應(yīng)的key.
使用工具發(fā)現(xiàn),key的前面多了\xAC\xED\x00\x05t\x00!這樣一個(gè)串.
而且value也是不能直觀可見的.
問題所在
使用springdataredis,默認(rèn)情況下是使用org.springframework.data.redis.serializer.JdkSerializationRedisSerializer這個(gè)類來做序列化.
org.springframework.data.redis.core.RedisTemplate代碼塊.
public void afterPropertiesSet() { super.afterPropertiesSet(); boolean defaultUsed = false; if (defaultSerializer == null) { defaultSerializer = new JdkSerializationRedisSerializer( classLoader != null ? classLoader : this.getClass().getClassLoader()); } if (enableDefaultSerializer) { if (keySerializer == null) { keySerializer = defaultSerializer; defaultUsed = true; } if (valueSerializer == null) { valueSerializer = defaultSerializer; defaultUsed = true; } if (hashKeySerializer == null) { hashKeySerializer = defaultSerializer; defaultUsed = true; } if (hashValueSerializer == null) { hashValueSerializer = defaultSerializer; defaultUsed = true; } } if (enableDefaultSerializer && defaultUsed) { Assert.notNull(defaultSerializer, "default serializer null and not all serializers initialized"); } if (scriptExecutor == null) { this.scriptExecutor = new DefaultScriptExecutor<K>(this); } initialized = true; }
解決
手動(dòng)設(shè)置key的序列化方式為StringRedisSerializer,強(qiáng)制使用.
由于spring不支持泛型注入,這樣會(huì)導(dǎo)致所有的redisTemplate的key序列方式都為StringRedisSerializer. 同時(shí),最好在序列化對(duì)象保存時(shí)候手動(dòng)將其轉(zhuǎn)為json串后存入redis.易于在可視化工具中直接查看對(duì)應(yīng)value
@Bean public RedisTemplate<String, ?> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(factory); RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();//Long類型不可以會(huì)出現(xiàn)異常信息; redisTemplate.setKeySerializer(stringRedisSerializer); return redisTemplate; }
以上所述是小編給大家介紹的springboot整合spring-data-redis遇到的坑,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- springboot2整合redis使用lettuce連接池的方法(解決lettuce連接池?zé)o效問題)
- 詳解springboot配置多個(gè)redis連接
- Springboot2.X集成redis集群(Lettuce)連接的方法
- springboot整合redis進(jìn)行數(shù)據(jù)操作(推薦)
- SpringBoot集成Redisson實(shí)現(xiàn)分布式鎖的方法示例
- SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實(shí)現(xiàn)
- SpringBoot項(xiàng)目中使用redis緩存的方法步驟
- springboot與redis的簡單整合實(shí)例
- SpringBoot通過RedisTemplate執(zhí)行Lua腳本的方法步驟
- springboot中操作redis實(shí)例分享
相關(guān)文章
Java使用Freemarker頁面靜態(tài)化生成的實(shí)現(xiàn)
這篇文章主要介紹了Java使用Freemarker頁面靜態(tài)化生成的實(shí)現(xiàn),頁面靜態(tài)化是將原來的動(dòng)態(tài)網(wǎng)頁改為通過靜態(tài)化技術(shù)生成的靜態(tài)網(wǎng)頁,FreeMarker?是一個(gè)用?Java?語言編寫的模板引擎,它基于模板來生成文本輸,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-06-06Java對(duì)象不使用時(shí)賦值null的意義詳解
這篇文章主要介紹了java對(duì)象不再使用時(shí)賦值null的意義,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03在Java中對(duì)List進(jìn)行分區(qū)的實(shí)現(xiàn)方法
在本文中,我們將說明如何將一個(gè)列表拆分為多個(gè)給定大小的子列表,也就是說在 Java 中如何對(duì)List進(jìn)行分區(qū),文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-04-04IDEA上面搭建一個(gè)SpringBoot的web-mvc項(xiàng)目遇到的問題
這篇文章主要介紹了IDEA上面搭建一個(gè)SpringBoot的web-mvc項(xiàng)目遇到的問題小結(jié),需要的朋友可以參考下2017-04-04詳解Spring Boot整合Mybatis實(shí)現(xiàn) Druid多數(shù)據(jù)源配置
本篇文章主要介紹了詳解Spring Boot整合Mybatis實(shí)現(xiàn) Druid多數(shù)據(jù)源配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03基于Spring?Cache實(shí)現(xiàn)Caffeine+Redis二級(jí)緩存
本文主要介紹了基于Spring?Cache實(shí)現(xiàn)Caffeine+Redis二級(jí)緩存,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03java?9大性能優(yōu)化經(jīng)驗(yàn)總結(jié)
這篇文章主要介紹了java?9大性能優(yōu)化經(jīng)驗(yàn)總結(jié),包括:Java代碼優(yōu)化,數(shù)據(jù)庫優(yōu)化,分布式緩存,異步化,Web前段,搜索引擎優(yōu)化等需要的朋友可以參考下2023-02-02