最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合Redis的實(shí)現(xiàn)示例

 更新時(shí)間:2023年01月25日 08:42:43   作者:llp1110  
本文主要介紹了SpringBoot整合Redis的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1.需求說(shuō)明

  • 在 springboot 中 , 整合 redis
  • 可以通過(guò) RedisTemplate 完成對(duì) redis 的操作, 包括設(shè)置數(shù)據(jù)/獲取數(shù)據(jù)
  • 比如添加和讀取數(shù)據(jù)

2.整合實(shí)現(xiàn)

2.1.創(chuàng)建Springboot工程

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring2.X 集成 redis 所需 common-pool-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <!--不要帶版本號(hào),防止沖突-->
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.2.2</version>
</dependency>

2.2.redis配置

配置連接信息

spring:
  redis:
    host: 192.168.79.202
    port: 6379
    #Redis 數(shù)據(jù)庫(kù)索引(默認(rèn)為 0)
    database: 0
    #連接超時(shí)時(shí)間(毫秒)
    timeout: 1800000
    lettuce:
      pool:
        #連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制)
        max-active: 20
        #最大阻塞等待時(shí)間(負(fù)數(shù)表示沒(méi)限制)
        max-wait: -1
        #連接池中的最大空閑連接
        min-idle: 0
        #密碼
    password: foobared

redis 配置類

如果不配置, springboot 會(huì)使用默認(rèn)配置, 這個(gè)默認(rèn)配置, 會(huì)出現(xiàn)一些問(wèn)題, 比如:
redisTemplate 的 key 序列化等, 問(wèn)題所以通常我們需要配置

@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template =
                new RedisTemplate<>();
        //這里可以驗(yàn)證..
        //System.out.println("template=>" + template);
        RedisSerializer<String> stringRedisSerializer =
                new StringRedisSerializer();
        Jackson2JsonRedisSerializer 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.WRAPPER_ARRAY);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(stringRedisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> stringRedisSerializer =
                new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //解決查詢緩存轉(zhuǎn)換異常的問(wèn)題
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.activateDefaultTyping(
                LaissezFaireSubTypeValidator.instance,
                ObjectMapper.DefaultTyping.NON_FINAL,
                JsonTypeInfo.As.WRAPPER_ARRAY);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // 配置序列化(解決亂碼的問(wèn)題),過(guò)期時(shí)間600秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }
}

3.編寫測(cè)試類

@RestController
@RequestMapping("/redisTest")
public class RedisTestController {

    @Resource
    private RedisTemplate redisTemplate;

    //編寫一個(gè)測(cè)試方法,演示設(shè)置數(shù)據(jù)和獲取數(shù)據(jù)
    @GetMapping("/t1")
    public String t1(){
        //設(shè)置值到redis
        redisTemplate.opsForValue().set("book","西游記");
        //從redis獲取值
        String book = (String)redisTemplate.opsForValue().get("book");
        return book;
    }

}

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

//編寫方法,演示如何操作list,hash,set,zset
//opsForList、opsForHash、opsForSet、opsForZSet
@GetMapping("/t2")
public String t2(){
    redisTemplate.opsForList().leftPushAll("books","西游記","java");
    List books = redisTemplate.opsForList().range("books", 0, -1);
    StringBuilder builder = new StringBuilder();
    for (Object book : books) {
        builder.append(book.toString()).append(" ");
        System.out.println("書名:"+book.toString());
    }
    return builder.toString();
}

輸出結(jié)果

書名:java
書名:西游記

4.注意事項(xiàng)和細(xì)節(jié)

1、如果沒(méi)有提供 RedisConfig 配置類 , springboot 會(huì)使用默認(rèn)配置, 也可以使用

2、如果沒(méi)有提供 RedisConfig 配置類 , springboot 會(huì)使用默認(rèn)配置, 但是會(huì)存在問(wèn)題,比如 redisTemplate 模糊查找 key 數(shù)據(jù)為空

//編寫一個(gè)方法獲取所有的key
@GetMapping("/t3")
public String t3(){
    Set keys = redisTemplate.keys("*");
    System.out.println(keys.size());
    System.out.println(keys);
    return "ok";
}
//輸出結(jié)果
0
[]

3、Unrecognized token ‘beijing’: was expecting (‘true’, ‘false’ or ‘null’)看報(bào)錯(cuò),是 jason 轉(zhuǎn)換異常,實(shí)際上是因?yàn)?redisTemplate 在做數(shù)據(jù)存儲(chǔ)的時(shí)候會(huì)把存儲(chǔ)的內(nèi)容序列化,所以,redisTemplate 讀取的時(shí)候也會(huì)反序列化,而在 redis 客戶端set 的時(shí)候并不會(huì)做序列化,因此 set 的進(jìn)去的值在用 redisTemplate 讀的時(shí)候就會(huì)報(bào)類型轉(zhuǎn)換異常了

//編寫方法獲取客戶端設(shè)置的key
//問(wèn)題描述:在客戶端設(shè)置了key,通過(guò)redisTemplate獲取會(huì)報(bào)錯(cuò)
@GetMapping("/t4")
public String t4(){
    String name = (String)redisTemplate.opsForValue().get("name");
    System.out.println("name = "+name);
    return name;
}

4、解決方案 : 最簡(jiǎn)單的就是用程序重新 set 一遍即可

到此這篇關(guān)于SpringBoot整合Redis的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot整合Redis內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringCloudAlibaba分布式組件詳解

    SpringCloudAlibaba分布式組件詳解

    這篇文章主要介紹了簡(jiǎn)單了解Spring Cloud Alibaba分布式組件相關(guān)知識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 關(guān)于RestTemplate中的Get請(qǐng)求

    關(guān)于RestTemplate中的Get請(qǐng)求

    這篇文章主要介紹了關(guān)于RestTemplate中的Get請(qǐng)求,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring實(shí)戰(zhàn)之使用@Resource配置依賴操作示例

    Spring實(shí)戰(zhàn)之使用@Resource配置依賴操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之使用@Resource配置依賴操作,結(jié)合實(shí)例形式分析了Spring使用@Resource配置依賴具體步驟、實(shí)現(xiàn)及測(cè)試案例,需要的朋友可以參考下
    2019-12-12
  • Java讀取Map的兩種方法與對(duì)比

    Java讀取Map的兩種方法與對(duì)比

    相信大家都知道在Java中Map的使用非常頻繁,我們經(jīng)常會(huì)需要對(duì)Map進(jìn)行遍歷和讀取,那么下面這篇文章將展示兩種遍歷的方法以及簡(jiǎn)要分析。有需要的可以參考借鑒,下面來(lái)一起看看吧。
    2016-11-11
  • 詳解Java多線程編程中線程的啟動(dòng)、中斷或終止操作

    詳解Java多線程編程中線程的啟動(dòng)、中斷或終止操作

    在Java中start和tun方法可用被用來(lái)啟動(dòng)線程,而用interrupt方法來(lái)中斷或終止線程,以下我們就來(lái)詳解Java多線程編程中線程的啟動(dòng)、中斷或終止操作
    2016-07-07
  • Mybatis中的PageHelper的執(zhí)行流程分析

    Mybatis中的PageHelper的執(zhí)行流程分析

    這篇文章主要介紹了Mybatis的PageHelper執(zhí)行流程,本文給大家介紹介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • dom4j操作xml的demo(分享)

    dom4j操作xml的demo(分享)

    下面小編就為大家?guī)?lái)一篇dom4j操作xml的demo(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • mybatis-plus內(nèi)置雪花算法主鍵重復(fù)問(wèn)題解決

    mybatis-plus內(nèi)置雪花算法主鍵重復(fù)問(wèn)題解決

    本文主要介紹了mybatis-plus內(nèi)置雪花算法主鍵重復(fù)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • SpringBoot如何優(yōu)雅實(shí)現(xiàn)接口參數(shù)驗(yàn)證

    SpringBoot如何優(yōu)雅實(shí)現(xiàn)接口參數(shù)驗(yàn)證

    為了保證參數(shù)的正確性,我們需要使用參數(shù)驗(yàn)證機(jī)制,來(lái)檢測(cè)并處理傳入的參數(shù)格式是否符合規(guī)范,所以本文就來(lái)和大家聊聊如何優(yōu)雅實(shí)現(xiàn)接口參數(shù)驗(yàn)證吧
    2023-08-08
  • 用IDEA創(chuàng)建SpringBoot項(xiàng)目的詳細(xì)步驟記錄

    用IDEA創(chuàng)建SpringBoot項(xiàng)目的詳細(xì)步驟記錄

    Idea有著非常簡(jiǎn)便的Spring Boot新建過(guò)程,同時(shí)依靠pom自動(dòng)下載依賴,下面這篇文章主要給大家介紹了關(guān)于用IDEA創(chuàng)建SpringBoot項(xiàng)目的詳細(xì)步驟,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08

最新評(píng)論

梨树县| 嵊州市| 安康市| 沙河市| 布尔津县| 丁青县| 胶州市| 普格县| 海晏县| 永康市| 怀集县| 建平县| 永福县| 阿拉善左旗| 湘乡市| 鹤岗市| 曲阜市| 尚义县| 读书| 临邑县| 宜川县| 屏东县| 石河子市| 建宁县| 林甸县| 蛟河市| 拉萨市| 永宁县| 搜索| 历史| 安乡县| 宿迁市| 楚雄市| 呼玛县| 米林县| 郎溪县| 甘孜县| 长宁区| 师宗县| 饶河县| 洞口县|