springBoot 2.3 整合redis

1.這里使用maven 管理jar包,所以pom中引入依賴,此處注意 spring-boot-starter-data-redis 引用的大版本號(hào)應(yīng)和所依賴的spring-boot-starter-parent 大版本號(hào)相同,即:spring-boot-starter-parent 版本為 2.3.x ,spring-boot-starter-data-redis 版本號(hào)也為 2.3.x 否則會(huì)引出類缺失異常
     <!--整合redis-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    <!--對(duì)象池-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
2.然后在application.yml文件里配置redis
spring:
  redis:
    # Redis數(shù)據(jù)庫索引(默認(rèn)為0)
    database: 0
    #數(shù)據(jù)庫ip地址
    host: 127.0.0.1
    #數(shù)據(jù)庫端口 默認(rèn)為6379
    port: 6379
    #數(shù)據(jù)庫密碼
    password: 123456
    lettuce:
      pool:
        #連接池最大連接數(shù)默認(rèn)8 負(fù)數(shù)表示無限制
        max-active: 8
        #連接池最大阻塞等待時(shí)間 默認(rèn)值-1  負(fù)數(shù)表示無限制
        max-wait: -1
        #連接池最大空閑連接 默認(rèn)8
        max-idle: 8
        #連接池最小空閑連接 默認(rèn)0
        min-idle: 0

這里我是用lettuce客戶端,未使用Jedis 二者 區(qū)別如下:
1、Jedis 是直連模式,在多個(gè)線程間共享一個(gè) Jedis 實(shí)例時(shí)是線程不安全的,
每個(gè)線程都去拿自己的 Jedis 實(shí)例,當(dāng)連接數(shù)量增多時(shí),物理連接成本就較高了
2、Lettuce的連接是基于Netty的,連接實(shí)例可以在多個(gè)線程間共享,如果你不知道Netty也沒事,大致意思就是一個(gè)多線程的應(yīng)用可以使用同一個(gè)連接實(shí)例,而不用擔(dān)心并發(fā)線程的數(shù)量。通過異步的方式可以讓我們更好地利用系統(tǒng)資源。
附注:若想詳細(xì)了解Lettuce 可以看這篇文章 https://www.cnblogs.com/throwable/p/11601538.html

3.配置RedisTemplate序列化, SpringBoot集成Redis后,使用redis存儲(chǔ)Object,redis默認(rèn)的序列化器在寫入key或value時(shí)會(huì)以二進(jìn)制的形式存儲(chǔ),不方便我們?nèi)粘S^察他的key和value,我們自定義一個(gè)RedisTemplate,設(shè)置序列化器,這樣我們可以很方便的操作實(shí)例對(duì)象,默認(rèn)情況下RedisTemplate模板只能支持字符串。
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(lettuceConnectionFactory);
        MyRedisSerializer  myRedisSerializer=new MyRedisSerializer();
        //key序列化方式
        template.setKeySerializer(new StringRedisSerializer());
        //value序列化
        template.setValueSerializer(new StringRedisSerializer());
        //value hashmap序列化
        template.setHashValueSerializer(new StringRedisSerializer());
        return template;
    }

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容