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

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

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

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

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

1. 問題原因

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

2. 解決方案

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

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

3. 配置類示例

以下是一個(gè)配置類的示例,使用 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,將對(duì)象存儲(chǔ)為 JSON 格式。
    • 通過 ObjectMapper 配置支持多態(tài)類型(activateDefaultTyping),以便反序列化時(shí)能正確還原對(duì)象類型。

5. 使用示例

配置完成后,RedisTemplate 會(huì)自動(dòng)使用新的序列化器。以下是一個(gè)簡單的使用示例:

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. 驗(yàn)證存儲(chǔ)結(jié)果

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

7. 注意事項(xiàng)

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

總結(jié)

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

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

相關(guān)文章

  • Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法

    Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了解決SpringBoot項(xiàng)目啟動(dòng)后網(wǎng)頁顯示Please sign in的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    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ì),對(duì)大家學(xué)習(xí)或者使用Spring Boot 2.X具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • idea項(xiàng)目報(bào)錯(cuò)缺失maven依賴問題及解決

    idea項(xiàng)目報(bào)錯(cuò)缺失maven依賴問題及解決

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

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

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

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

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

最新評(píng)論