欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合Redis的哨兵模式的實(shí)現(xiàn)

 更新時(shí)間:2024年08月19日 09:46:20   作者:牛肉胡辣湯  
Redis提供了哨兵模式來處理主從切換和故障轉(zhuǎn)移,本文主要介紹了SpringBoot整合Redis的哨兵模式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在開發(fā)中,Redis是一個(gè)非常流行和強(qiáng)大的緩存數(shù)據(jù)庫。為了保證高可用性和容錯(cuò)性,Redis提供了哨兵模式(Sentinel)來處理主從切換和故障轉(zhuǎn)移。 本篇技術(shù)博客將介紹如何在Spring Boot應(yīng)用中使用Redis的哨兵模式進(jìn)行高可用緩存服務(wù)的搭建。

準(zhǔn)備工作

在開始之前,確保你已經(jīng)安裝和啟動(dòng)了Redis服務(wù)器,并按照Redis的哨兵模式配置了主節(jié)點(diǎn)和從節(jié)點(diǎn)。

添加依賴

pom.xml文件中添加Spring Data Redis和Jedis的依賴:

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

Redis配置

application.yaml文件中進(jìn)行Redis的配置,包括主服務(wù)器和哨兵節(jié)點(diǎn)的信息:

spring:
  redis:
    sentinel:
      master: mymaster  # 主節(jié)點(diǎn)名稱
      nodes: host1:port1,host2:port2,host3:port3  # 哨兵節(jié)點(diǎn)列表

創(chuàng)建Redis配置類

創(chuàng)建一個(gè)Redis的配置類,用于配置Redis連接工廠和緩存管理器:

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
    @Value("${spring.redis.sentinel.master}")
    private String master;
    @Value("${spring.redis.sentinel.nodes}")
    private String sentinelNodes;
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisSentinelConfiguration sentinelConfiguration = new RedisSentinelConfiguration()
                .master(master);
        Set<String> nodes = new HashSet<>(Arrays.asList(sentinelNodes.split(",")));
        nodes.forEach(node -> {
            String[] parts = node.split(":");
            sentinelConfiguration.sentinel(parts[0], Integer.parseInt(parts[1]));
        });
        return new JedisConnectionFactory(sentinelConfiguration);
    }
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(10)); // 設(shè)置緩存過期時(shí)間為10分鐘
        return RedisCacheManager.builder(redisConnectionFactory)
                .cacheDefaults(redisCacheConfiguration)
                .transactionAware()
                .build();
    }
}

在這個(gè)配置類中,我們首先通過讀取配置文件中的主節(jié)點(diǎn)名稱和哨兵節(jié)點(diǎn)列表來創(chuàng)建RedisSentinelConfiguration對(duì)象。然后,我們遍歷哨兵節(jié)點(diǎn)列表并將它們添加到配置中。 接下來,我們使用JedisConnectionFactory來創(chuàng)建RedisConnectionFactory,并將之前創(chuàng)建的RedisSentinelConfiguration傳遞給它。 最后,我們創(chuàng)建了RedisCacheConfiguration并設(shè)置了一個(gè)常見的緩存過期時(shí)間,然后使用它來構(gòu)建RedisCacheManager

使用Redis緩存

在Spring Boot的服務(wù)類或控制器中,我們可以使用@Cacheable、@CachePut@CacheEvict等注解來實(shí)現(xiàn)緩存功能。這些注解可以應(yīng)用于方法上,以指定需要緩存的方法或操作。

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    @Cacheable(value = "users", key = "#id")
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
    @CachePut(value = "users", key = "#user.id")
    public User saveUser(User user) {
        return userRepository.save(user);
    }
    @CacheEvict(value = "users", key = "#id")
    public void deleteUserById(Long id) {
        userRepository.deleteById(id);
    }
}

運(yùn)行應(yīng)用程序

現(xiàn)在,我們已經(jīng)完成了Spring Boot的Redis哨兵模式配置和使用Redis緩存的代碼編寫。 運(yùn)行應(yīng)用程序,并在需要使用緩存的地方使用上述的@Cacheable、@CachePut@CacheEvict注解,Spring Boot將自動(dòng)處理緩存,并通過Redis的哨兵模式提供高可用性和容錯(cuò)性。

當(dāng)結(jié)合實(shí)際應(yīng)用場景進(jìn)行Redis的哨兵模式配置時(shí),通常是為了實(shí)現(xiàn)高可用的緩存服務(wù)。下面給出一個(gè)示例代碼,假設(shè)我們有一個(gè)商品管理系統(tǒng),我們使用Redis緩存來存儲(chǔ)商品信息,并保證緩存的高可用性。 首先,我們需要在Spring Boot應(yīng)用中配置Redis的哨兵模式并使用Redis緩存。可以參考上面提到的配置和代碼。 然后,我們可以在商品服務(wù)類中使用Redis緩存來存儲(chǔ)和獲取商品信息。

@Service
public class ProductService {
    @Autowired
    private ProductRepository productRepository;
    @Cacheable(value = "products", key = "#id")
    public Product getProductById(Long id) {
        // 先從緩存中獲取商品信息
        // 如果緩存中不存在,從數(shù)據(jù)庫中獲取,并將結(jié)果存入緩存
        return productRepository.findById(id).orElse(null);
    }
    @CachePut(value = "products", key = "#product.id")
    public Product saveProduct(Product product) {
        // 保存商品信息到數(shù)據(jù)庫,并將結(jié)果存入緩存
        return productRepository.save(product);
    }
    @CacheEvict(value = "products", key = "#id")
    public void deleteProductById(Long id) {
        // 從數(shù)據(jù)庫中刪除商品信息,并從緩存中移除對(duì)應(yīng)的數(shù)據(jù)
        productRepository.deleteById(id);
    }
}

在上述代碼中,我們使用@Cacheable注解將getProductById方法標(biāo)記為可緩存的。當(dāng)調(diào)用該方法時(shí),Spring Boot會(huì)首先嘗試從緩存中獲取商品信息。如果緩存中存在對(duì)應(yīng)的數(shù)據(jù),則直接返回緩存中的數(shù)據(jù);如果緩存中不存在,則會(huì)從數(shù)據(jù)庫中獲取商品信息,并將結(jié)果存入緩存。 使用@CachePut注解將saveProduct方法標(biāo)記為緩存更新的操作。該方法用于保存或更新商品信息到數(shù)據(jù)庫,并將最新的商品信息存入緩存。通過指定相同的緩存名稱和緩存鍵,可以覆蓋之前的緩存數(shù)據(jù)。 使用@CacheEvict注解將deleteProductById方法標(biāo)記為緩存失效的操作。該方法用于刪除數(shù)據(jù)庫中的商品信息,并從緩存中移除相應(yīng)的數(shù)據(jù)。 通過以上示例代碼,我們可以實(shí)現(xiàn)基于Redis的哨兵模式的高可用緩存服務(wù)。在生產(chǎn)環(huán)境中,可以部署多個(gè)Redis節(jié)點(diǎn),并使用哨兵模式來實(shí)現(xiàn)主從切換和故障轉(zhuǎn)移,以確保緩存服務(wù)的可用性和容錯(cuò)性。 請(qǐng)注意,上述示例代碼中的ProductRepository是一個(gè)假設(shè)的商品數(shù)據(jù)訪問接口,具體的實(shí)現(xiàn)根據(jù)實(shí)際情況進(jìn)行編寫。另外,還需要在application.yaml中配置正確的Redis主節(jié)點(diǎn)和哨兵節(jié)點(diǎn)的信息。

Spring Boot中如何使用Redis的哨兵模式: 首先,確保已經(jīng)引入Spring Data Redis和Lettuce依賴。

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

接下來,在application.properties(或application.yml)中進(jìn)行配置,包括Redis的哨兵節(jié)點(diǎn)和密碼等信息:

# Redis配置
spring.redis.sentinel.master=my-master
spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
spring.redis.password=your-password

然后,使用@Configuration注解創(chuàng)建一個(gè)配置類,配置RedisTemplate和LettuceConnectionFactory:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
@Configuration
public class RedisConfig {
    @Bean
    public RedisSentinelConfiguration redisSentinelConfiguration() {
        RedisSentinelConfiguration configuration = new RedisSentinelConfiguration();
        configuration.master("my-master");
        configuration.sentinel("127.0.0.1", 26379);
        configuration.sentinel("127.0.0.1", 26380);
        configuration.sentinel("127.0.0.1", 26381);
        configuration.setPassword(RedisPassword.of("your-password"));
        return configuration;
    }
    @Bean
    public LettuceConnectionFactory lettuceConnectionFactory(RedisSentinelConfiguration redisSentinelConfiguration) {
        return new LettuceConnectionFactory(redisSentinelConfiguration);
    }
    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(lettuceConnectionFactory);
        return redisTemplate;
    }
}

最后,可以在業(yè)務(wù)邏輯中使用自動(dòng)注入的RedisTemplate來操作Redis數(shù)據(jù):

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class RedisService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    public void setValue(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }
    public Object getValue(String key) {
        return redisTemplate.opsForValue().get(key);
    }
}

在上述示例代碼中,我們首先創(chuàng)建了一個(gè)RedisConfig配置類,通過@Bean注解配置了RedisSentinelConfigurationLettuceConnectionFactory。然后,我們創(chuàng)建了一個(gè)RedisTemplate并將LettuceConnectionFactory注入其中。最后,我們?cè)?strong>RedisService服務(wù)類中使用自動(dòng)注入的RedisTemplate來操作Redis數(shù)據(jù)。 請(qǐng)注意,上述示例代碼中的配置信息和Redis連接參數(shù)是示例,實(shí)際應(yīng)用中需要根據(jù)實(shí)際情況進(jìn)行配置和更改。

總結(jié)

通過本篇技術(shù)博客,我們學(xué)習(xí)了如何在Spring Boot應(yīng)用中使用Redis的哨兵模式進(jìn)行高可用性緩存服務(wù)的搭建。 要注意的是,為了實(shí)現(xiàn)真正的高可用性,需要在實(shí)際生產(chǎn)環(huán)境中正確配置Redis的主節(jié)點(diǎn)和哨兵節(jié)點(diǎn)。

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

相關(guān)文章

  • Mybatis-Plus同時(shí)使用邏輯刪除和唯一索引的問題及解決辦法(報(bào)數(shù)據(jù)重復(fù)Duplicate entry的問題)

    Mybatis-Plus同時(shí)使用邏輯刪除和唯一索引的問題及解決辦法(報(bào)數(shù)據(jù)重復(fù)Duplicate entry的

    在開發(fā)中,我們經(jīng)常會(huì)有邏輯刪除和唯一索引同時(shí)使用的情況,但當(dāng)使用mybatis plus時(shí),如果同時(shí)使用邏輯刪除和唯一索引,會(huì)報(bào)數(shù)據(jù)重復(fù)Duplicate entry的問題,如何解決這個(gè)問題呢,小編給大家分享Mybatis-Plus同時(shí)使用邏輯刪除和唯一索引的問題及解決辦法,一起看看吧
    2023-11-11
  • Java中@Autowired和@Resource區(qū)別

    Java中@Autowired和@Resource區(qū)別

    本文主要介紹了Java中@Autowired和@Resource區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java多線程 中斷機(jī)制及實(shí)例詳解

    Java多線程 中斷機(jī)制及實(shí)例詳解

    這篇文章主要介紹了Java多線程 中斷機(jī)制及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java編寫實(shí)現(xiàn)九宮格應(yīng)用

    Java編寫實(shí)現(xiàn)九宮格應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了Java編寫實(shí)現(xiàn)九宮格應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • IntelliJ Idea2017如何修改緩存文件的路徑

    IntelliJ Idea2017如何修改緩存文件的路徑

    這篇文章主要介紹了IntelliJ Idea2017如何修改緩存文件的路徑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java如何利用線程池和Redis實(shí)現(xiàn)高效數(shù)據(jù)入庫

    Java如何利用線程池和Redis實(shí)現(xiàn)高效數(shù)據(jù)入庫

    文章介紹了如何利用線程池和Redis在高并發(fā)環(huán)境中實(shí)現(xiàn)高效的數(shù)據(jù)入庫,通過將數(shù)據(jù)首先存儲(chǔ)在Redis緩存中,然后利用線程池定期批量入庫處理,確保系統(tǒng)的性能和穩(wěn)定性,主要組件包括BatchDataStorageService、CacheService和RedisUtils等
    2025-02-02
  • 字符串desede 3des加密示例分享

    字符串desede 3des加密示例分享

    這篇文章主要介紹了字符串desede 3des加密示例,大家參考使用吧
    2014-01-01
  • maven?解包依賴項(xiàng)中的文件的解決方法

    maven?解包依賴項(xiàng)中的文件的解決方法

    Maven是java中的一種項(xiàng)目管理、項(xiàng)目構(gòu)建、依賴管理的工具,接下來通過本文給大家介紹maven?解包依賴項(xiàng)中的文件,需要的朋友可以參考下
    2022-07-07
  • 在Spring使用iBatis及配置講解

    在Spring使用iBatis及配置講解

    今天小編就為大家分享一篇關(guān)于在Spring使用iBatis及配置講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 深入理解Spring Boot屬性配置文件

    深入理解Spring Boot屬性配置文件

    這篇文章主要給大家深入的介紹了關(guān)于Spring Boot屬性配置文件的相關(guān)資料,文中介紹的很詳細(xì),相信對(duì)大家具有一定的參考借鑒價(jià)值,需要的朋友們下面來一起看看吧。
    2017-02-02

最新評(píng)論