欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

RedisTemplate默認(rèn)序列化方式顯示中文亂碼的解決

 更新時間:2025年06月06日 10:54:48   作者:qq_29781527  
本文主要介紹了SpringDataRedis默認(rèn)使用JdkSerializationRedisSerializer導(dǎo)致數(shù)據(jù)亂碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在 Spring Data Redis 中,存儲數(shù)據(jù)時出現(xiàn)亂碼通常是因為 RedisTemplate 的默認(rèn)序列化方式(JdkSerializationRedisSerializer)將數(shù)據(jù)存儲為二進制格式,而不是可讀的字符串格式。要解決這個問題,你可以通過配置 RedisTemplate,使用合適的序列化器(如 StringRedisSerializer 或 Jackson2JsonRedisSerializer)來存儲數(shù)據(jù)。

以下是解決方案和配置示例:

1. 問題原因

  • 默認(rèn)情況下,Spring Data Redis 使用 JdkSerializationRedisSerializer,它會將對象序列化為二進制格式,導(dǎo)致 Redis 中存儲的數(shù)據(jù)不可讀。
  • 如果你希望存儲為可讀的字符串或 JSON 格式,需要修改 RedisTemplate 的序列化器。

2. 解決方案

通過配置 RedisTemplate,指定 key 和 value 的序列化器。常用的序列化器包括:

  • StringRedisSerializer:將 key 和 value 存儲為字符串。
  • Jackson2JsonRedisSerializer:將 value 存儲為 JSON 格式。

3. 配置類示例

以下是一個配置類的示例,使用 StringRedisSerializer 和 Jackson2JsonRedisSerializer

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);

        // 使用 StringRedisSerializer 序列化 key
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());

        // 使用 Jackson2JsonRedisSerializer 序列化 value
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.activateDefaultTyping(
            LaissezFaireSubTypeValidator.instance,
            ObjectMapper.DefaultTyping.NON_FINAL,
            JsonTypeInfo.As.PROPERTY
        );
        serializer.setObjectMapper(objectMapper);

        template.setValueSerializer(serializer);
        template.setHashValueSerializer(serializer);

        return template;
    }
}

4. 配置說明

  • StringRedisSerializer
    • 用于序列化 key 和 hash key,確保 key 是字符串格式。
  • Jackson2JsonRedisSerializer
    • 用于序列化 value 和 hash value,將對象存儲為 JSON 格式。
    • 通過 ObjectMapper 配置支持多態(tài)類型(activateDefaultTyping),以便反序列化時能正確還原對象類型。

5. 使用示例

配置完成后,RedisTemplate 會自動使用新的序列化器。以下是一個簡單的使用示例:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void saveUser(String key, User user) {
        redisTemplate.opsForValue().set(key, user);
    }

    public User getUser(String key) {
        return (User) redisTemplate.opsForValue().get(key);
    }
}

6. 驗證存儲結(jié)果

  • 使用 StringRedisSerializer 和 Jackson2JsonRedisSerializer 后,Redis 中存儲的數(shù)據(jù)將是可讀的字符串或 JSON 格式。
  • 例如,存儲的 key 會是 user:1,value 會是 {"id":1,"name":"John"}

7. 注意事項

  • 如果已經(jīng)存儲了二進制格式的數(shù)據(jù),修改序列化器后,需要手動清理 Redis 中的數(shù)據(jù),或者編寫遷移腳本將舊數(shù)據(jù)轉(zhuǎn)換為新格式。
  • 如果存儲的是復(fù)雜對象(如集合或嵌套對象),確保 ObjectMapper 配置正確,以支持反序列化。

總結(jié)

通過配置 RedisTemplate 的序列化器,可以解決 Spring Data Redis 存儲數(shù)據(jù)亂碼的問題。推薦使用 StringRedisSerializer 和 Jackson2JsonRedisSerializer,分別處理 key 和 value 的序列化。

到此這篇關(guān)于RedisTemplate默認(rèn)序列化方式顯示中文亂碼的解決的文章就介紹到這了,更多相關(guān)RedisTemplate默認(rèn)序列化亂碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Validation Api實現(xiàn)原理解析

    Java Validation Api實現(xiàn)原理解析

    這篇文章主要介紹了Java Validation Api實現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot如何IDEA中實現(xiàn)熱部署

    SpringBoot如何IDEA中實現(xiàn)熱部署

    這篇文章主要介紹了SpringBoot如何IDEA中實現(xiàn)熱部署,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot如何通過yml方式整合Mybatis

    SpringBoot如何通過yml方式整合Mybatis

    這篇文章主要介紹了SpringBoot如何通過yml方式整合Mybatis,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • RocketMQ?producer容錯機制源碼解析

    RocketMQ?producer容錯機制源碼解析

    這篇文章主要為大家介紹了RocketMQ?producer容錯機制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • maven升級版本后報錯:Blocked mirror for repositories

    maven升級版本后報錯:Blocked mirror for repositories

    本文主要介紹了maven升級版本后報錯:Blocked mirror for repositories,文中的解決方法非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • Mybatis如何自動生成數(shù)據(jù)庫表的實體類

    Mybatis如何自動生成數(shù)據(jù)庫表的實體類

    這篇文章主要介紹了Mybatis自動生成數(shù)據(jù)庫表的實體類的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Mybatis嵌套子查詢動態(tài)SQL編寫實踐

    Mybatis嵌套子查詢動態(tài)SQL編寫實踐

    這篇文章主要介紹了Mybatis嵌套子查詢動態(tài)SQL編寫方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • springboot serverEndpoint導(dǎo)致@resource注解不生效

    springboot serverEndpoint導(dǎo)致@resource注解不生效

    在SpringBoot中,@Resource注解用于注入依賴,本文主要介紹了springboot serverEndpoint導(dǎo)致@resource注解不生效,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • springsecurity6配置自定義路徑身份認(rèn)證的實現(xiàn)

    springsecurity6配置自定義路徑身份認(rèn)證的實現(xiàn)

    本文主要介紹了springsecurity6配置自定義路徑身份認(rèn)證的實現(xiàn),通過使用自定義的AuthorizationManager和MyService,可以實現(xiàn)更靈活的訪問控制,感興趣的可以了解一下
    2025-03-03
  • 從入門到精通:Java List遍歷修改的完全指南

    從入門到精通:Java List遍歷修改的完全指南

    在Java中,我們經(jīng)常需要遍歷List集合并對其中的元素進行修改,這可以通過使用迭代器或for循環(huán)來實現(xiàn),需要的朋友可以參考下
    2023-10-10

最新評論