springboot整合spring-data-redis遇到的坑
描述
使用springboot整合redis,使用默認的序列化配置,然后使用redis-client去查詢時查詢不到相應的key.
使用工具發(fā)現(xiàn),key的前面多了\xAC\xED\x00\x05t\x00!這樣一個串.

而且value也是不能直觀可見的.
問題所在
使用springdataredis,默認情況下是使用org.springframework.data.redis.serializer.JdkSerializationRedisSerializer這個類來做序列化.
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;
}
解決
手動設置key的序列化方式為StringRedisSerializer,強制使用.
由于spring不支持泛型注入,這樣會導致所有的redisTemplate的key序列方式都為StringRedisSerializer. 同時,最好在序列化對象保存時候手動將其轉為json串后存入redis.易于在可視化工具中直接查看對應value
@Bean
public RedisTemplate<String, ?> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();//Long類型不可以會出現(xiàn)異常信息;
redisTemplate.setKeySerializer(stringRedisSerializer);
return redisTemplate;
}
以上所述是小編給大家介紹的springboot整合spring-data-redis遇到的坑,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- springboot2整合redis使用lettuce連接池的方法(解決lettuce連接池無效問題)
- 詳解springboot配置多個redis連接
- Springboot2.X集成redis集群(Lettuce)連接的方法
- springboot整合redis進行數(shù)據(jù)操作(推薦)
- SpringBoot集成Redisson實現(xiàn)分布式鎖的方法示例
- SpringBoot Redis配置Fastjson進行序列化和反序列化實現(xiàn)
- SpringBoot項目中使用redis緩存的方法步驟
- springboot與redis的簡單整合實例
- SpringBoot通過RedisTemplate執(zhí)行Lua腳本的方法步驟
- springboot中操作redis實例分享
相關文章
spring?boot獲取session的值為null問題及解決方法
我在登陸的時候,登陸成功后將name存進了session,然后在獲取個人信息時取出session里的name的值為null,接下來通過本文給大家分享springboot獲取session的值為null問題,需要的朋友可以參考下2023-05-05
Spring Boot 接口參數(shù)加密解密的實現(xiàn)方法
這篇文章主要介紹了Spring Boot 接口參數(shù)加密解密的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
一種新的日期處理方式之JavaScript Temporal API
JavaScript Temporal API是一種為Web開發(fā)人員提供了一種新的處理日期和時間數(shù)據(jù)類型的方式。它的目的是使操作日期和時間更加簡單和可靠,而且不用擔心歷史時區(qū)問題或全球化協(xié)調時間(UTC)之類的問題,感興趣的同學可以參考閱讀2023-05-05
Java Servlet簡單實例分享(文件上傳下載demo)
下面小編就為大家?guī)硪黄狫ava Servlet簡單實例分享(文件上傳下載demo)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
IDEA上面搭建一個SpringBoot的web-mvc項目遇到的問題
這篇文章主要介紹了IDEA上面搭建一個SpringBoot的web-mvc項目遇到的問題小結,需要的朋友可以參考下2017-04-04

