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

Spring Boot 項(xiàng)目集成Redis的方式詳解

 更新時(shí)間:2021年08月23日 10:02:41   作者:Acelin_H''''''''''''''''''''''''''''''''s Blog  
這篇文章主要介紹了Spring Boot 項(xiàng)目集成Redis的方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧,需要的朋友可以參考下

集成方式

使用Jedis

Jedis是Redis官方推薦的面向Java的操作Redis的客戶端,是對服務(wù)端直連后進(jìn)行操作。如果直接使用Jedis進(jìn)行連接,多線程環(huán)境下是非線程安全的,正式生產(chǎn)環(huán)境一般使用連接池進(jìn)行連接。

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

使用spring-data-redis

由Spring 框架提供,是對Redis客戶端的進(jìn)一步封裝,屏蔽了不同客戶端的不同實(shí)現(xiàn)方式,讓服務(wù)端和客戶端進(jìn)一步解耦;也就是你可以切換不同的客戶端實(shí)現(xiàn),比如Jedis或Lettuce(Redis客戶端實(shí)現(xiàn)之一),而不影響你的業(yè)務(wù)邏輯。

類似于的SpringCloud的服務(wù)治理框架對不同服務(wù)治理組件的適配,或是AMQP

它利用RedisTemplate對JedisApi進(jìn)行高度封裝。使用的依賴如下:

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

Redis的安裝

​收先要安裝Redis服務(wù)端,Redis官方提供的是Linux安裝包。網(wǎng)上有很多詳細(xì)的安裝教程,這里不做展開。關(guān)于Windows下的安裝,可參考我的另一篇博文windows下Redis的安裝和使用

綁定配置

​完成Redis服務(wù)端的安裝之后,我們開始在項(xiàng)目中進(jìn)行集成。這里我們先介紹使用Jedis的方式進(jìn)行的集成。先按上面的提及的方式進(jìn)行依賴的引入。然后將Redis的相關(guān)信息配置到配置文件中去。我們可以的新建一個(gè)配置文件redis.properties,內(nèi)容如下:

# Redis數(shù)據(jù)庫索引(默認(rèn)為0)
spring.redis.database=0
# Redis服務(wù)器地址
spring.redis.host=127.0.0.1
# Redis服務(wù)器連接端口
spring.redis.port=6379
# Redis服務(wù)器連接密碼(默認(rèn)為空)
spring.redis.password=
# 連接超時(shí)時(shí)間(毫秒)
spring.redis.timeout=0

​接下來我們要為Redis客戶端連接綁定上面的配置,創(chuàng)建出來的客戶端實(shí)例才能夠連接到我們的想連的Redis服務(wù)端。你可以使用@Value注解或@ConfigurationProperties注解的方式,本文采用的是后者,如果還不清楚的該注解的用法,可以移步我的另一篇博文@ConfigurationProperties實(shí)現(xiàn)自定義配置綁定查看,這里不做展開。

​以下是Redis服務(wù)端信息配置的接收類:MyRedisProperties.java

@ConfigurationProperties(
        prefix = "spring.redis"
)
@Component
@Data
@PropertySource("classpath:/redis.properties")
public class MyRedisProperties {
    private String database;
    private String host;
    private Integer port;
    private String password;
    private Integer timeOut;
}

由于我們正式生產(chǎn)環(huán)境一般都是采用連接池方式實(shí)現(xiàn),所以我們還需要關(guān)于連接池的配置如下:

# 連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
spring.redis.pool.max-active=8
# 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)
spring.redis.pool.max-wait=-1
# 連接池中的最大空閑連接
spring.redis.pool.max-idle=8
# 連接池中的最小空閑連接
spring.redis.pool.min-idle=0

對應(yīng)的接收類如下:

@ConfigurationProperties(
        prefix = "spring.redis.pool"
)
@Data
@Component
@PropertySource("classpath:/redis.properties")
public class RedisPoolProperties {

    private Integer maxActive;
    private Integer maxWait;
    private Integer maxIdle;
    private Integer minIdle;
}

然后向Spring容器裝配客戶端實(shí)例,分為單個(gè)客戶端和連接池兩種實(shí)現(xiàn),如下代碼:

@Configuration
public class RedisConfig {

    @Autowired
    private RedisPoolProperties redisPoolProperties;
    @Autowired
    private MyRedisProperties myRedisProperties;

    @Bean
    public Jedis singleJedis(){
        return new Jedis(myRedisProperties.getHost(),myRedisProperties.getPort());
    }

    @Bean
    public JedisPool jedisPool(){ 
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(redisPoolProperties.getMaxIdle());
        poolConfig.setMaxTotal(redisPoolProperties.getMaxActive());
        poolConfig.setMaxWaitMillis(redisPoolProperties.getMaxWait() * 1000);
        JedisPool jp = new JedisPool(poolConfig, myRedisProperties.getHost(), myRedisProperties.getPort(),
                myRedisProperties.getTimeOut()*1000, myRedisProperties.getPassword(), 0);
        return jp;

    }
}

獲取Redis客戶端

進(jìn)行相關(guān)配置的綁定之后,意味著我們程序可以拿到Redis和連接池的相關(guān)信息,然后進(jìn)行客戶端的創(chuàng)建和連接了。所以我們要向Spring容器裝配客戶端實(shí)例,分為單個(gè)客戶端和連接池兩種實(shí)現(xiàn),如下代碼:

@Configuration
public class RedisConfig {

    @Autowired
    private RedisPoolProperties redisPoolProperties;
    @Autowired
    private MyRedisProperties myRedisProperties;

    @Bean
    public Jedis singleJedis(){
        return new Jedis(myRedisProperties.getHost(),myRedisProperties.getPort());
    }

    @Bean
    public JedisPool jedisPool(){ 
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(redisPoolProperties.getMaxIdle());
        poolConfig.setMaxTotal(redisPoolProperties.getMaxActive());
        poolConfig.setMaxWaitMillis(redisPoolProperties.getMaxWait() * 1000);
        JedisPool jp = new JedisPool(poolConfig, myRedisProperties.getHost(), myRedisProperties.getPort(),
                myRedisProperties.getTimeOut()*1000, myRedisProperties.getPassword(), 0);
        return jp;

    }
}

Redis工具的編寫

裝配好客戶端實(shí)例后,我們就可以通過@Autowired的方式進(jìn)行注入使用了。我們都知道,Redis有5中數(shù)據(jù)類型,分別是:

  • string(字符串)
  • hash(哈希)
  • list(列表)
  • set(集合)
  • zset(sorted set:有序集合)

所以的有必要的封裝一個(gè)操作者5種數(shù)據(jù)列表的工具類,由于篇幅的關(guān)系,我們以Redis最基本的數(shù)據(jù)類型String為例,簡單封裝幾個(gè)操作方法作為示例如下,更詳細(xì)的封裝,可參考java操作Redis數(shù)據(jù)庫的redis工具,RedisUtil,jedis工具JedisUtil,JedisPoolUtil這一博文

@Service
public class RedisService {

    @Autowired
    private JedisPool jedisPool; // 連接池方式
    @Autowired
    private Jedis myJedis; // 單個(gè)客戶端

    public <T> T get(String key, Class<T> clazz) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            String str = jedis.get(key);
            return stringToBean(str,clazz);
        } finally {
            close(jedis);
        }
    }

    public <T> void set(String key, T value) {
        try {
            String str = value.toString();
            if (str == null || str.length() <= 0) {
                return;
            }
            myJedis.set(key, str);
        } finally {
            close(myJedis);
        }
    }

    private void close(Jedis jedis) {
        if (jedis != null) {
            jedis.close();
        }
    }

    /**
     * 把一個(gè)字符串轉(zhuǎn)換成bean對象
     * @param str
     * @param <T>
     * @return
     */
    public static <T> T stringToBean(String str, Class<T> clazz) {

        if(str == null || str.length() <= 0 || clazz == null) {
            return null;
        }

        if(clazz == int.class || clazz == Integer.class) {
            return (T)Integer.valueOf(str);
        }else if(clazz == String.class) {
            return (T)str;
        }else if(clazz == long.class || clazz == Long.class) {
            return  (T)Long.valueOf(str);
        }else {
            return JSON.toJavaObject(JSON.parseObject(str), clazz);
        }
    }
}

其中get方法使用連接池中的客戶端實(shí)例,set方法用到的是非連接池的實(shí)例,以區(qū)分兩種不同的使用方式

使用

封裝好的Redis的操作工具類后,我們就可以直接使用該工具類來進(jìn)行對Redis的各種操作 。如下,直接注入即可。

@RestController
public class TestController {

    @Autowired
    private RedisService redisService;
    
    ......
}

到此這篇關(guān)于Spring Boot 項(xiàng)目集成Redis的文章就介紹到這了,更多相關(guān)Spring Boot 項(xiàng)目集成Redis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis 中spark參數(shù)executor-cores引起的異常解決辦法

    Redis 中spark參數(shù)executor-cores引起的異常解決辦法

    這篇文章主要介紹了Redis 中spark參數(shù)executor-cores引起的異常解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 利用Redis實(shí)現(xiàn)防止接口重復(fù)提交功能

    利用Redis實(shí)現(xiàn)防止接口重復(fù)提交功能

    大家好,本篇文章主要講的是利用Redis實(shí)現(xiàn)防止接口重復(fù)提交功能,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 如何用redis?setNX命令來加鎖

    如何用redis?setNX命令來加鎖

    這篇文章主要介紹了如何用redis?setNX命令來加鎖,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Redis解決緩存擊穿問題的兩種方法

    Redis解決緩存擊穿問題的兩種方法

    緩存擊穿問題也叫熱點(diǎn)Key問題,就是?個(gè)被高并發(fā)訪問并且緩存重建業(yè)務(wù)較復(fù)雜的key突然失效了,無數(shù)的請求訪問會在瞬間給數(shù)據(jù)庫帶來巨大的沖擊,本文給大家介紹了Redis解決緩存擊穿問題的兩種方法,需要的朋友可以參考下
    2025-03-03
  • redis安裝和配置_動力節(jié)點(diǎn)Java學(xué)院整理

    redis安裝和配置_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了redis安裝和配置,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 一文帶你了解Redis的三種集群模式

    一文帶你了解Redis的三種集群模式

    Redis?的常用的集群方式主要有以下三種,分別是主從復(fù)制模式、哨兵模式、Redis-Cluster集群模式,那么下面我們就分別了解一下這三種集群模式的優(yōu)點(diǎn)與缺點(diǎn)
    2023-06-06
  • Redis 分片集群的實(shí)現(xiàn)

    Redis 分片集群的實(shí)現(xiàn)

    本文主要介紹了Redis 分片集群的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Redis中的延遲雙刪

    Redis中的延遲雙刪

    這篇文章主要介紹了Redis中的延遲雙刪問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 配置Redis序列化方式不生效問題及解決

    配置Redis序列化方式不生效問題及解決

    這篇文章主要介紹了配置Redis序列化方式不生效問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Redis密碼設(shè)置與訪問限制實(shí)現(xiàn)方法

    Redis密碼設(shè)置與訪問限制實(shí)現(xiàn)方法

    這篇文章主要介紹了Redis密碼設(shè)置與訪問限制實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評論

达拉特旗| 大安市| 礼泉县| 峨眉山市| 亚东县| 丹棱县| 安达市| 平舆县| 四平市| 芦溪县| 兴宁市| 阜平县| 府谷县| 积石山| 漳浦县| 平邑县| 壶关县| 广平县| 萨迦县| 通许县| 尚志市| 南昌县| 林州市| 龙川县| 广河县| 广饶县| 获嘉县| 康马县| 中江县| 涟水县| 桐乡市| 定兴县| 刚察县| 永新县| 泽普县| 西城区| 曲阳县| 安顺市| 石城县| 满城县| 垫江县|