欧美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)文章

  • Spring之動態(tài)注冊bean的實現(xiàn)方法

    Spring之動態(tài)注冊bean的實現(xiàn)方法

    這篇文章主要介紹了Spring之動態(tài)注冊bean的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Ubuntu16.04安裝部署solr7的圖文詳細(xì)教程

    Ubuntu16.04安裝部署solr7的圖文詳細(xì)教程

    這篇文章主要為大家詳細(xì)介紹了Ubuntu16.04安裝部署solr7的圖文詳細(xì)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • springboot實現(xiàn)配置多環(huán)境yml方式

    springboot實現(xiàn)配置多環(huán)境yml方式

    在SpringBoot項目中,通過創(chuàng)建不同的YAML配置文件來實現(xiàn)多環(huán)境配置是一種常見且有效的方法,這些配置文件包括application.yml、application-dev.yml、application-prod.yml等,分別對應(yīng)不同的開發(fā)環(huán)境,如開發(fā)環(huán)境、生產(chǎn)環(huán)境
    2024-11-11
  • java 一個類實現(xiàn)兩個接口的案例

    java 一個類實現(xiàn)兩個接口的案例

    這篇文章主要介紹了java 一個類實現(xiàn)兩個接口的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringMVC結(jié)構(gòu)簡介及常用注解匯總

    SpringMVC結(jié)構(gòu)簡介及常用注解匯總

    這篇文章主要介紹了SpringMVC結(jié)構(gòu)簡介及常用注解匯總,幫助大家更好的理解和學(xué)習(xí)使用SpringMVC,感興趣的朋友可以了解下
    2021-03-03
  • 解決SpringBoot項目啟動后網(wǎng)頁顯示Please sign in的問題

    解決SpringBoot項目啟動后網(wǎng)頁顯示Please sign in的問題

    這篇文章主要介紹了解決SpringBoot項目啟動后網(wǎng)頁顯示Please sign in的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Spring Boot 2.X優(yōu)雅的解決跨域問題

    Spring Boot 2.X優(yōu)雅的解決跨域問題

    這篇文章主要給大家介紹了關(guān)于Spring Boot 2.X如何優(yōu)雅的解決跨域問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot 2.X具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • idea項目報錯缺失maven依賴問題及解決

    idea項目報錯缺失maven依賴問題及解決

    這篇文章主要介紹了idea項目報錯缺失maven依賴問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • JavaEE中關(guān)于ServletConfig的小結(jié)

    JavaEE中關(guān)于ServletConfig的小結(jié)

    ServletConfig是針對特定的Servlet的參數(shù)或?qū)傩?。ServletConfig是表示單獨的Servlet的配置和參數(shù),只是適用于特定的Servlet。從一個servlet被實例化后,對任何客戶端在任何時候訪問有效,但僅對本servlet有效,一個servlet的ServletConfig對象不能被另一個servlet訪問
    2014-10-10
  • JSON,AJAX,Maven入門基礎(chǔ)

    JSON,AJAX,Maven入門基礎(chǔ)

    這篇文章主要介紹了JSON,AJAX和Maven基礎(chǔ),如何使用AJAX讀取Json數(shù)組里面的數(shù)據(jù),感興趣的小伙伴們可以參考一下,希望能夠幫助到你
    2021-07-07

最新評論