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

Springboot下RedisTemplate的兩種序列化方式實例詳解

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

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

@Configuration
public class RedisConfig {

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

測試類進行測試

@SpringBootTest
class RedisDemoApplicationTests {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Test
    void testString() {
        // 寫入一條String數據
        redisTemplate.opsForValue().set("name", "虎哥");
        // 獲取string數據
        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);
    }
}

測試存入字符串

在這里插入圖片描述

測試存入對象

對象類:

在這里插入圖片描述

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

在這里插入圖片描述

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

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

在這里插入圖片描述

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

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

    @Test
    void testString() {
        // 寫入一條String數據
        stringRedisTemplate.opsForValue().set("stringRedisTemplate:name", "虎哥");
        // 獲取string數據
        Object name = stringRedisTemplate.opsForValue().get("name");
        System.out.println("name = " + name);
    }
	/*
	*手動進行序列化,比較麻煩
	*/
    @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庫內的JSONUtil工具類,省去手動序列化,庫的依賴在下面
    * */
    @Test
    void testObject1() {
        User user = new User();
        user.setName("何雨泊");
        user.setTel(110);
        /*利用hutool庫內的JSONUtil進行自動序列化,將user轉json*/
        stringRedisTemplate.opsForValue().set("user", JSONUtil.toJsonStr(user));
        String userjson = stringRedisTemplate.opsForValue().get("user");
        /*將json轉為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>

測試結果:

在這里插入圖片描述

三、總結

RedisTemplate的兩種序列化實踐方案:

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

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

相關文章

  • Java編程synchronized與lock的區(qū)別【推薦】

    Java編程synchronized與lock的區(qū)別【推薦】

    互聯網信息泛濫環(huán)境下少有的良心之作!如果您想對Java編程synchronized與lock的區(qū)別有所了解,這篇文章絕對值得!分享給大家,供需要的朋友參考。不說了,我先學習去了。
    2017-10-10
  • Json字符串內容比較超實用教程

    Json字符串內容比較超實用教程

    這篇文章主要介紹了Json字符串內容比較-超實用版,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • SpringBoot詳解如何整合Redis緩存驗證碼

    SpringBoot詳解如何整合Redis緩存驗證碼

    本文主要介紹了SpringBoot集成Redis實現驗證碼的緩存簡單案例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Java中ThreadLocal的一些理解

    Java中ThreadLocal的一些理解

    這篇文章主要介紹了Java中ThreadLocal的一些理解,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-12-12
  • Java由淺入深分析多態(tài)的概念

    Java由淺入深分析多態(tài)的概念

    多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量到底會指向哪個類的實例對象,該引用變量發(fā)出的方法調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定
    2022-04-04
  • 實例詳解Spring Boot實戰(zhàn)之Redis緩存登錄驗證碼

    實例詳解Spring Boot實戰(zhàn)之Redis緩存登錄驗證碼

    本章簡單介紹redis的配置及使用方法,本文示例代碼在前面代碼的基礎上進行修改添加,實現了使用redis進行緩存驗證碼,以及校驗驗證碼的過程。感興趣的的朋友一起看看吧
    2017-08-08
  • Spring Boot 中PageHelper 插件使用配置思路詳解

    Spring Boot 中PageHelper 插件使用配置思路詳解

    這篇文章主要介紹了Spring Boot 中PageHelper 插件使用配置及實現思路,通過引入myabtis和pagehelper依賴,在yml中配置mybatis掃描和實體類,具體實現方法跟隨小編一起看看吧
    2021-08-08
  • Java 字符串截取及常見場景與方法詳解

    Java 字符串截取及常見場景與方法詳解

    在 Java 開發(fā)中,截取字符串是一個非常常見的操作,無論是獲取文件名還是提取某些特定內容,本文詳細介紹了截取字符串最后一位及其他常見截取操作的多種方法,幫助開發(fā)者快速上手,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • springboot3如何接入nacos

    springboot3如何接入nacos

    這篇文章主要介紹了springboot3接入nacos的配置方法,經過很長時間的折騰終于搞定,下面把步驟操作過程分享給大家,需要的朋友可以參考下
    2024-03-03
  • Java語言實現簡單FTP軟件 FTP軟件主界面(4)

    Java語言實現簡單FTP軟件 FTP軟件主界面(4)

    這篇文章主要為大家詳細介紹了Java語言實現簡單FTP軟件,FTP軟件主界面編寫的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評論