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

Springboot下RedisTemplate的兩種序列化方式實(shí)例詳解

 更新時間:2022年09月22日 09:44:57   作者:愛吃辣的People  
這篇文章主要介紹了Springboot下RedisTemplate的兩種序列化方式,通過定義一個配置類,自定義RedisTemplate的序列化方式,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、定義一個配置類,自定義RedisTemplate的序列化方式

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
        // 創(chuàng)建RedisTemplate對象
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        // 設(shè)置連接工廠
        template.setConnectionFactory(connectionFactory);
        // 創(chuàng)建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer =
                new GenericJackson2JsonRedisSerializer();
        StringRedisSerializer stringRedisSerializer =
                new StringRedisSerializer();
        // 設(shè)置Key的序列化
        template.setKeySerializer(stringRedisSerializer);
        template.setHashKeySerializer(stringRedisSerializer);
        // 設(shè)置Value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        template.setHashValueSerializer(jsonRedisSerializer);
        // 返回
        return template;
    }
}

測試類進(jìn)行測試

@SpringBootTest
class RedisDemoApplicationTests {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Test
    void testString() {
        // 寫入一條String數(shù)據(jù)
        redisTemplate.opsForValue().set("name", "虎哥");
        // 獲取string數(shù)據(jù)
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println("name = " + name);
    }

    @Test
    void testObject() {
        User user = new User();
        user.setName("何雨泊");
        user.setTel(110);
        redisTemplate.opsForValue().set("user",user);
        System.out.println("name = " + user);
    }
}

測試存入字符串

在這里插入圖片描述

測試存入對象

對象類:

在這里插入圖片描述

測試結(jié)果如下,能將Java對象自動的序列化為JSON字符串,并且查詢時能自動把JSON反序列化為Java對象。
不過,其中記錄了序列化時對應(yīng)的class名稱,目的是為了查詢時實(shí)現(xiàn)自動反序列化。這會帶來額外的內(nèi)存開銷。

在這里插入圖片描述

二、繼續(xù)優(yōu)化

這個問題的解決我們可以采用手動序列化的方式,換句話說,就是不借助默認(rèn)的序列化器,而是我們自己來控制序列化的動作,同時,我們只采用String的序列化器,這樣,在存儲value時,我們就不需要在內(nèi)存中就不用多存儲數(shù)據(jù),從而節(jié)約我們的內(nèi)存空間。

在這里插入圖片描述

這種用法比較普遍,因此SpringDataRedis就提供了RedisTemplate的子類:StringRedisTemplate,它的key和value的序列化方式默認(rèn)就是String方式。省去了我們自定義RedisTemplate的序列化方式的步驟,而是直接使用:

@SpringBootTest
public class RedisStringTests {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    void testString() {
        // 寫入一條String數(shù)據(jù)
        stringRedisTemplate.opsForValue().set("stringRedisTemplate:name", "虎哥");
        // 獲取string數(shù)據(jù)
        Object name = stringRedisTemplate.opsForValue().get("name");
        System.out.println("name = " + name);
    }
	/*
	*手動進(jìn)行序列化,比較麻煩
	*/
    @Test
    void testObject() throws JsonProcessingException{
        // 創(chuàng)建
        ObjectMapper mapper = new ObjectMapper();

        User user = new User();
        user.setName("何雨泊");
        user.setTel(110);
        // 手動序列化
        String json = mapper.writeValueAsString(user);
        stringRedisTemplate.opsForValue().set("stringRedisTemplate:user",json);

        String string = stringRedisTemplate.opsForValue().get("stringRedisTemplate:user");
        // 手動反序列化
        User user1 = mapper.readValue(string, User.class);
        System.out.println("name = " + user1);
    }
	/*
    * 利用hutool庫內(nèi)的JSONUtil工具類,省去手動序列化,庫的依賴在下面
    * */
    @Test
    void testObject1() {
        User user = new User();
        user.setName("何雨泊");
        user.setTel(110);
        /*利用hutool庫內(nèi)的JSONUtil進(jìn)行自動序列化,將user轉(zhuǎn)json*/
        stringRedisTemplate.opsForValue().set("user", JSONUtil.toJsonStr(user));
        String userjson = stringRedisTemplate.opsForValue().get("user");
        /*將json轉(zhuǎn)為bean對象*/
        User user1 = JSONUtil.toBean(userjson, User.class);
        System.out.println("name = " + user1);
    }
}

hutool庫的依賴

        <!--hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.17</version>
        </dependency>

測試結(jié)果:

在這里插入圖片描述

三、總結(jié)

RedisTemplate的兩種序列化實(shí)踐方案:

  • 方案一(存在一定問題):
  • 自定義RedisTemplate
  • 修改RedisTemplate的序列化器為GenericJackson2JsonRedisSerializer
  • 方案二(對方案一進(jìn)行優(yōu)化):
    • 使用StringRedisTemplate
    • 寫入Redis時,手動把對象序列化為JSON 或者 使用工具類JSONUtil進(jìn)行序列化(推薦)
    • 讀取Redis時,手動把讀取到的JSON反序列化為對象

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

相關(guān)文章

  • IntelliJ IDEA 2020.1 EAP4 發(fā)布,重命名/更改簽名新功能一覽

    IntelliJ IDEA 2020.1 EAP4 發(fā)布,重命名/更改簽名新功能一覽

    這篇文章主要介紹了IntelliJ IDEA 2020.1 EAP4 發(fā)布,重命名/更改簽名新功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot手寫自定義starter源碼

    SpringBoot手寫自定義starter源碼

    這篇文章主要介紹了SpringBoot手寫自定義starter源碼,SpringBoot擁有很多方便使用的starter,比如spring-boot-starter-log4j、mybatis-spring-boot-starter.jar等,各自都代表了一個相對完整的功能模塊,需要的朋友可以參考下
    2023-10-10
  • java 數(shù)值類型分秒時間格式化的實(shí)例代碼

    java 數(shù)值類型分秒時間格式化的實(shí)例代碼

    這篇文章主要介紹了java 數(shù)值類型分秒時間格式化的實(shí)例代碼的相關(guān)資料,將秒或分鐘的值轉(zhuǎn)換為xx天xx小時xx分鐘xx秒 如果 “xx” 為0 自動缺省,需要的朋友可以參考下
    2017-07-07
  • SpringBoot整合七牛云上傳圖片的示例代碼

    SpringBoot整合七牛云上傳圖片的示例代碼

    本文就來介紹了SpringBoot整合七牛云上傳圖片的示例代碼,用戶在前端上傳圖片后,交由后端處理,上傳至七牛云,感興趣的可以了解一下
    2023-10-10
  • Java源碼分析:Guava之不可變集合ImmutableMap的源碼分析

    Java源碼分析:Guava之不可變集合ImmutableMap的源碼分析

    今天給大家?guī)淼氖顷P(guān)于Java源碼的相關(guān)知識,文章圍繞著Java ImmutableMap展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下,希望能給你帶來幫助
    2021-06-06
  • java LinkedList的實(shí)例詳解

    java LinkedList的實(shí)例詳解

    這篇文章主要介紹了java LinkedList的實(shí)例詳解的相關(guān)資料,通過本文希望大家能徹底了解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • Java多線程之Disruptor入門

    Java多線程之Disruptor入門

    這篇文章主要介紹了Java多線程之Disruptor入門,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java多線程的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java SE求解漢諾塔問題的示例代碼

    Java SE求解漢諾塔問題的示例代碼

    漢諾塔問題是一個經(jīng)典的問題。漢諾塔(Hanoi Tower),又稱河內(nèi)塔,源于印度一個古老傳說。本文將用Java SE求解這一問題,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • Java 簡化正則表達(dá)式的使用

    Java 簡化正則表達(dá)式的使用

    本篇文章主要介紹了Java 簡化正則表達(dá)式使用的相關(guān)知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • Mybatis不啟動項(xiàng)目直接測試Mapper的實(shí)現(xiàn)方法

    Mybatis不啟動項(xiàng)目直接測試Mapper的實(shí)現(xiàn)方法

    在項(xiàng)目開發(fā)中,測試單個Mybatis Mapper方法通常需要啟動整個SpringBoot項(xiàng)目,消耗大量時間,本文介紹通過Main方法和Mybatis配置類,快速測試Mapper功能,無需啟動整個項(xiàng)目,這方法使用AnnotationConfigApplicationContext容器
    2024-09-09

最新評論