亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot集成redis存對(duì)象亂碼的問(wèn)題及解決

 更新時(shí)間:2022年06月16日 11:23:04   作者:IOvera  
這篇文章主要介紹了springboot集成redis存對(duì)象亂碼的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot集成redis存對(duì)象亂碼

其實(shí)本質(zhì)上不算是一種亂碼,只是序列化之后存儲(chǔ)的東西而已,當(dāng)我們使用RedisTemplete存儲(chǔ)對(duì)象,時(shí),如果該對(duì)象沒(méi)有被序列化則會(huì)報(bào)錯(cuò),序列化之后得到的不是自己想要的數(shù)據(jù),為了解決這種方法,我們可以使用 StringRedisTemplete

話不多說(shuō)上代碼

默認(rèn)使用redistemplete時(shí)

/**
 * title: list
 *
 *  當(dāng)我們保存到redis中的是一個(gè)對(duì)象時(shí),我們會(huì)發(fā)現(xiàn)會(huì)報(bào)錯(cuò),提示我們需要序列化 ,
 *  當(dāng)我們繼承了序列化接口之后,查看設(shè)置的值時(shí),我們發(fā)現(xiàn)設(shè)置的值不是原來(lái)的樣字,
 *  此時(shí)我們可以通過(guò)兩種方式解決
 *      1.
 *
 * @author : ZHeng
 */
@SpringBootTest
public class RedisListTest01 {

//    @Autowired
//    StringRedisTemplate stringRedisTemplate;

    @Autowired
    RedisTemplate redisTemplate;

    @Test
    public void test(){
        redisTemplate.opsForValue().set("user1",new User(2,"lisi",19));
        System.out.println(redisTemplate.opsForValue().get("user1"));
    }
}

當(dāng)我們運(yùn)行時(shí)會(huì)發(fā)現(xiàn)報(bào)錯(cuò)了!提示我們User對(duì)象沒(méi)有序列化。

org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.xxx.redis01.model.User]

    .....
Caused by: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.xxx.redis01.model.User]
    at org.springframework.core.serializer.DefaultSerializer.serialize(DefaultSerializer.java:43)
    at org.springframework.core.serializer.Serializer.serializeToByteArray(Serializer.java:56)
    at org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:60)
    ... 72 more


Process finished with exit code -1

當(dāng)我們給User對(duì)象序列化之后運(yùn)行

public class User implements Serializable {
? ? private Integer id;
? ? private String name;
? ? private Integer age;
? ? //省略getter setter toString等
}

天啦嚕,竟然不亂碼了!!! ,但是–當(dāng)你使用linux 遠(yuǎn)程連接后查看keys 時(shí)你會(huì)發(fā)現(xiàn),欸? 這里亂碼了。。。

2022-04-01 20:32:07.666  INFO 18640 --- [           main] com.xxx.redis01.RedisListTest01          : No active profile set, falling back to 1 default profile: "default"
2022-04-01 20:32:07.998  INFO 18640 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2022-04-01 20:32:08.000  INFO 18640 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2022-04-01 20:32:08.018  INFO 18640 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces.
2022-04-01 20:32:08.752  INFO 18640 --- [           main] com.xxx.redis01.RedisListTest01          : Started RedisListTest01 in 1.488 seconds (JVM running for 2.517)
User{id=2, name='lisi', age='19'}

Process finished with exit code 0

這是什么鬼? 明明是user1 這是啥啊

127.0.0.1:6379> keys *
??ser1

可以考慮使用StringRedisTemplete

解決方式肯定不是只有一種,只是自己學(xué)習(xí)記錄,,僅供參考

@SpringBootTest
public class RedisListTest01 {

? ? @Autowired
? ? StringRedisTemplate stringRedisTemplate;

? ? @Test
? ? public void test(){
? ? ? ? stringRedisTemplate.opsForValue().set("user1",new User(2,"lisi",19).toString());
? ? ? ? System.out.println(stringRedisTemplate.opsForValue().get("user1"));
? ? }
}

成功拿到

User{id=2, name='lisi', age='19'}

我們?cè)趌inux下看看,同樣ok

127.0.0.1:6379> keys *
user1
127.0.0.1:6379> get user1
User{id=2, name='lisi', age='19'}
127.0.0.1:6379>?

當(dāng)然還有另一種方式,存入JSON格式,這里就不放代碼了.

解決redis亂碼問(wèn)題

直接添加一個(gè)配置類(lèi)就行了

/**解決redis中文亂碼
?* Created by dgx on 2019/8
?*/
@Configuration
public class Config {

? ? @Autowired
? ? private RedisTemplate redisTemplate;

? ? @Bean
? ? public RedisTemplate redisTemplateInit() {
? ? ? ? //設(shè)置序列化Key的實(shí)例化對(duì)象
? ? ? ? redisTemplate.setKeySerializer(new StringRedisSerializer());
? ? ? ? //設(shè)置序列化Value的實(shí)例化對(duì)象
? ? ? ? redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
? ? ? ? return redisTemplate;
? ? }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring配置文件加密方法示例

    spring配置文件加密方法示例

    這篇文章主要介紹了spring配置文件加密方法示例,簡(jiǎn)單介紹了什么是配置文件,然后分享了在實(shí)際生產(chǎn)環(huán)境中,對(duì)配置文件不允許出現(xiàn)明文用戶名及密碼等信息需求的Java實(shí)現(xiàn)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java并發(fā)編程——volatile關(guān)鍵字

    Java并發(fā)編程——volatile關(guān)鍵字

    這篇文章主要介紹了Java并發(fā)編程——volatile關(guān)鍵字的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java并發(fā)編程,感興趣的朋友可以了解下
    2020-10-10
  • Mybatis 傳輸List的實(shí)現(xiàn)代碼

    Mybatis 傳輸List的實(shí)現(xiàn)代碼

    本文通過(guò)實(shí)例代碼給大家介紹了mybatis傳輸list的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-09-09
  • 本地MinIO存儲(chǔ)服務(wù)Java遠(yuǎn)程調(diào)用上傳文件的操作過(guò)程

    本地MinIO存儲(chǔ)服務(wù)Java遠(yuǎn)程調(diào)用上傳文件的操作過(guò)程

    MinIO是一款高性能、分布式的對(duì)象存儲(chǔ)系統(tǒng),它可以100%的運(yùn)行在標(biāo)準(zhǔn)硬件上,即X86等低成本機(jī)器也能夠很好的運(yùn)行MinIO,這篇文章主要介紹了本地MinIO存儲(chǔ)服務(wù)Java遠(yuǎn)程調(diào)用上傳文件的操作過(guò)程,需要的朋友可以參考下
    2023-11-11
  • Java設(shè)計(jì)模式之觀察者模式解析

    Java設(shè)計(jì)模式之觀察者模式解析

    這篇文章主要介紹了Java設(shè)計(jì)模式之觀察者模式解析,觀察者模式,又被稱(chēng)為發(fā)布/訂閱模式,它定義了一種一對(duì)多的依賴(lài)關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一個(gè)主題對(duì)象,這個(gè)主題對(duì)象在狀態(tài)變化時(shí),會(huì)通知所有的觀察者對(duì)象,使他們能夠自動(dòng)更新自己,需要的朋友可以參考下
    2023-09-09
  • JVM分配和回收堆外內(nèi)存的方式與注意點(diǎn)

    JVM分配和回收堆外內(nèi)存的方式與注意點(diǎn)

    JVM啟動(dòng)時(shí)分配的內(nèi)存稱(chēng)為堆內(nèi)存,與之相對(duì)的,在代碼中還可以使用堆外內(nèi)存,比如Netty,廣泛使用了堆外內(nèi)存,下面這篇文章主要給大家介紹了關(guān)于JVM分配和回收堆外內(nèi)存的方式與注意點(diǎn),需要的朋友可以參考下
    2022-07-07
  • Java 設(shè)計(jì)模式之適配器模式詳解

    Java 設(shè)計(jì)模式之適配器模式詳解

    設(shè)計(jì)模式(Design pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類(lèi)編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性
    2021-11-11
  • spring boot加載資源路徑配置和classpath問(wèn)題解決

    spring boot加載資源路徑配置和classpath問(wèn)題解決

    這篇文章主要介紹了spring boot加載資源路徑配置和classpath問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Java零基礎(chǔ)教程之do-while循環(huán)語(yǔ)句實(shí)例

    Java零基礎(chǔ)教程之do-while循環(huán)語(yǔ)句實(shí)例

    Java中的do-while循環(huán)是一種后測(cè)試循環(huán)語(yǔ)句,它類(lèi)似于while循環(huán),但它先執(zhí)行循環(huán)體中的代碼,然后再進(jìn)行條件判斷,無(wú)論條件是否滿足,至少會(huì)執(zhí)行一次循環(huán)體中的代碼,這篇文章主要給大家介紹了關(guān)于Java零基礎(chǔ)教程之do-while循環(huán)語(yǔ)句的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • Java實(shí)現(xiàn)PDF文件的分割與加密功能

    Java實(shí)現(xiàn)PDF文件的分割與加密功能

    這篇文章主要為大家分享了如何利用Java語(yǔ)言實(shí)現(xiàn)PDF文件的分割與加密以及封面圖的生成,文中的示例代碼簡(jiǎn)潔易懂,感興趣的可以了解一下
    2022-04-04

最新評(píng)論