日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > MAC >内容正文

MAC

SpringBoot整合Redis实现序列化存储Java对象的操作方法

發(fā)布時(shí)間:2023/11/24 MAC 28 博士
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot整合Redis实现序列化存储Java对象的操作方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
  • 一、背景
    • 1、思考
    • 2、方案
  • 二、源碼分析
    • 三、注入RedisTemplate
      • 1、引入依賴
      • 2、Redis 連接信息
      • 3、Redis 核心配置類
      • 4、Redis工具類
    • 四、測(cè)試
      • 1、創(chuàng)建 Java 實(shí)體類 UserInfo
      • 2、測(cè)試用例
      • 3、測(cè)試結(jié)果

    之前介紹過(guò) https://www.jb51.net/article/223539.htm 我們可以看出,在 SpringBoot 對(duì) Redis 做了一系列的自動(dòng)裝配,使用還是非常方便的

    一、背景

    1、思考

    通過(guò)我們前面的學(xué)習(xí),我們已經(jīng)可以往 Redis 中存入字符串,那么我們要往 Redis 中存入 Java 對(duì)象該怎么辦呢?

    2、方案

    我們可以將 Java 對(duì)象轉(zhuǎn)化為 JSON 對(duì)象,然后轉(zhuǎn)為 JSON 字符串,存入 Redis,那么我們從 Redis 中取出該數(shù)據(jù)的時(shí)候,我們也只能取出字符串,并轉(zhuǎn)為 Java 對(duì)象,這一系列的操作是不是顯得有些麻煩呢?

    二、源碼分析

    • 以上是 RedisAutoConfiguration 類中的源碼片段,可以看出 SpringBoot 對(duì) Redis 做自動(dòng)化配置的時(shí)候,在容器中注入了 redisTemplate 和 stringRedisTemplate
    • 其中,RedisTemplate<Object, Object> 表示,key 的類型為 Object,value 的類型為 Object,但是我們往往需要的是 RedisTemplate<String, Object>,這就需要我們重新注入一個(gè) RedisTemplate 的 Bean,它的泛型為 RedisTemplate<String, Object>,并設(shè)置 key,value 的序列化方式
    • 看到這個(gè)@ConditionalOnMissingBean注解后,就知道如果Spring容器中有了RedisTemplate對(duì)象了,這個(gè)自動(dòng)配置的RedisTemplate不會(huì)實(shí)例化。因此我們可以直接自己寫個(gè)配置類,配置RedisTemplate。

    三、注入RedisTemplate

    1、引入依賴

    <!-- redis -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    以上引入了 redis 的依賴,其余依賴請(qǐng)自行添加

    2、Redis 連接信息

    spring:
      # Redis配置
      redis:
        host: 127.0.0.1
        port: 6379
        database: 10
        jedis:
          pool:
            # 連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制)
            max-active: 50
            # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制)
            max-wait: 3000ms
            # 連接池中的最大空閑連接數(shù)
            max-idle: 20
            # 連接池中的最小空閑連接數(shù)
            min-idle: 5
        # 連接超時(shí)時(shí)間(毫秒)
        timeout: 5000ms

    3、Redis 核心配置類

    Redis 的核心配置我們放在 RedisConfig.java 文件中

    package com.zyxx.redistest.common;
    
    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.RedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    /**
     * @ClassName RedisConfig
     * @Description
     * @Author Lizhou
     * @Date 2020-10-22 9:48:48
     **/
    
    @Configuration
    public class RedisConfig {
    
        /**
         * RedisTemplate配置
         */
        @Bean
        public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
    		// 配置redisTemplate
            RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            // 設(shè)置序列化
            Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
            jackson2JsonRedisSerializer.setObjectMapper(om);
            // key序列化
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            // value序列化
            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
            // Hash key序列化
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
            // Hash value序列化
            redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
            redisTemplate.afterPropertiesSet();
            return redisTemplate;
        }
    }
    
    

    我們注入了一個(gè)名稱為 redisTemplate,類型為 RedisTemplate<String, Object> 的 Bean,key 采用 StringRedisSerializer 序列化方式,value 采用 Jackson2JsonRedisSerializer 序列化方式

    4、Redis工具類

    我們將對(duì) Redis 進(jìn)行的一系列操作放在 RedisUtils.java 文件中

    package com.zyxx.redistest.common;
    
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.stereotype.Component;
    
    /**
     * @ClassName RedisUtils
     * @Description
     * @Author Lizhou
     * @Date 2020-10-22 10:10:10
     **/
    @Slf4j
    @Component
    public class RedisUtils {
    
        @Autowired
        private RedisTemplate<String, Object> redisTemplate;
    
        /**
         * 根據(jù)key讀取數(shù)據(jù)
         */
        public Object get(final String key) {
            if (StringUtils.isBlank(key)) {
                return null;
            }
            try {
                return redisTemplate.opsForValue().get(key);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 寫入數(shù)據(jù)
         */
        public boolean set(final String key, Object value) {
            if (StringUtils.isBlank(key)) {
                return false;
            }
            try {
                redisTemplate.opsForValue().set(key, value);
                log.info("存入redis成功,key:{},value:{}", key, value);
                return true;
            } catch (Exception e) {
                log.error("存入redis失敗,key:{},value:{}", key, value);
                e.printStackTrace();
            }
            return false;
        }
    }
    

    我們寫入了 get,set 兩個(gè)方法用于測(cè)試

    四、測(cè)試

    1、創(chuàng)建 Java 實(shí)體類 UserInfo

    package com.zyxx.redistest.common;
    
    import lombok.Data;
    
    import java.io.Serializable;
    import java.util.Date;
    
    /**
     * @ClassName UserInfo
     * @Description
     * @Author Lizhou
     * @Date 2020-10-22 10:12:12
     **/
    @Data
    public class UserInfo implements Serializable {
        /**
         * id
         */
        private Integer id;
        /**
         * 姓名
         */
        private String name;
        /**
         * 創(chuàng)建時(shí)間
         */
        private Date createTime;
    }

    2、測(cè)試用例

    package com.zyxx.redistest;
    
    import com.zyxx.redistest.common.RedisUtils;
    import com.zyxx.redistest.common.UserInfo;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import java.util.Date;
    
    @SpringBootTest
    class RedisTestApplicationTests {
    
        @Autowired
        private RedisUtils redisUtil;
    
        @Test
        void contextLoads() {
            UserInfo userInfo = new UserInfo();
            userInfo.setId(1);
            userInfo.setName("jack");
            userInfo.setCreateTime(new Date());
            // 放入redis
            redisUtil.set("user", userInfo);
            // 從redis中獲取
    		System.out.println("獲取到數(shù)據(jù):" + redisUtil.get("user"));
        }
    }

    我們向 Redis 中存入了一個(gè) key 為 ”user“,value 為 UserInfo 對(duì)象的數(shù)據(jù),然后再根據(jù) key 獲取該數(shù)據(jù)

    3、測(cè)試結(jié)果

    可以看出,我們往 Redis 中成功存入 Java 對(duì)象數(shù)據(jù),并成功獲取到了該對(duì)象

    到此這篇關(guān)于SpringBoot整合Redis實(shí)現(xiàn)序列化存儲(chǔ)Java對(duì)象的文章就介紹到這了,更多相關(guān)SpringBoot整合Redis序列化存儲(chǔ)Java對(duì)象內(nèi)容請(qǐng)搜索電腦知識(shí)網(wǎng)www.pcxun.com以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持電腦知識(shí)網(wǎng)www.pcxun.com!

    總結(jié)

    以上是生活随笔為你收集整理的SpringBoot整合Redis实现序列化存储Java对象的操作方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩高清毛片 | 男人靠女人免费视频网站 | 夜夜噜噜噜 | 午夜国产在线 | 91麻豆精品国产91久久久久久久久 | 国产精品无码av无码 | 美女被爆操网站 | 久免费一级suv好看的国产 | 国产在线观看黄色 | 91精品国产欧美一区二区成人 | 中文在线а√在线8 | 日批视频免费播放 | 精品人妻无码在线 | 国产免费脚交足视频在线观看 | 久草视频在线看 | 91日韩视频| 久久久无码人妻精品无码 | 亚洲中文字幕一区在线 | 91狠狠爱| 一级视频片 | 少妇脚交调教玩男人的视频 | 国内自拍视频网站 | 狠狠人妻久久久久久综合麻豆 | 久久久久久18 | 精品影视一区二区 | 国产波霸爆乳一区二区 | 欧美极品videos精品 | 在线观看黄色av网站 | 中国黄色一级大片 | 日韩色网| 亚洲午夜免费视频 | 欧美高清 | 黄色av网址在线观看 | 国产精品视频一二三 | 伊人久久艹| 健身教练巨大粗爽gay视频 | 日韩精品xxx| 操干视频 | 羞羞的网站在线观看 | 人妻一区二区三区视频 | 久久夫妻视频 | 九九九九九伊人 | a视频免费在线观看 | 毛片a| 国产精品一区二区免费 | 熟女高潮一区二区三区视频 | av丝袜在线| 天天射天天干 | 午夜影院在线看 | 狠狠干天天操 | 免费观看的av | 成 人 黄 色 片 在线播放 | 日韩久久一区二区 | 国产老肥熟 | 草草草av| 亚洲欲妇| 国产精品a久久久久 | 亚洲一区二区观看播放 | 粗大黑人巨茎大战欧美成人 | 久久高清| 久久午夜电影网 | 91麻豆网 | 国产精品久久九九 | 97超碰人人澡人人爱学生 | 亚洲精品入口 | 成a人v| 在线不卡视频 | 午夜播放 | 日韩在线不卡一区 | 久久久久久蜜桃一区二区 | 国产精品国产三级国产普通话对白 | 粗大挺进潘金莲身体在线播放 | 久久99国产精品成人 | 国产一区不卡在线 | 日韩伦理一区二区三区 | yjizz视频网 国产乱人对白 | 亚洲精品www | 精品国产人妻一区二区三区 | 亚洲成人黄 | 国产午夜福利精品 | 亚洲综合视频网 | 中文在线观看免费视频 | 有码一区二区三区 | 大又大又粗又硬又爽少妇毛片 | 一级女性全黄久久生活片免费 | 国产精品一区二区三区在线免费观看 | 亚洲国产高清国产精品 | 欧洲视频一区二区 | 午夜美女福利视频 | 国产一级啪啪 | 亚洲顶级毛片 | 日日做夜夜爽毛片麻豆 | 捆绑凌虐一区二区三区 | 人妻换人妻仑乱 | 深夜在线 | 乳色吐息在线观看 | 欧美另类z0z变态 | 免费在线日本 | 久久久久久久久久99 |