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

Redis哨兵模式在Spring Boot項目中的使用與實踐完全指南

 更新時間:2025年09月08日 17:11:59   作者:知識淺談  
Redis哨兵模式為SpringBoot項目提供高可用Redis管理,實現(xiàn)自動故障轉(zhuǎn)移與監(jiān)控,通過配置依賴、參數(shù)及最佳實踐(如哨兵節(jié)點數(shù)量、網(wǎng)絡(luò)規(guī)劃),可提升系統(tǒng)穩(wěn)定性與可靠性,本文給大家介紹Redis哨兵模式在Spring Boot項目中的使用與實踐,感興趣的朋友跟隨小編一起看看吧

Redis哨兵模式在Spring Boot項目中的使用與實踐

什么是Redis哨兵模式?

Redis Sentinel(哨兵)是Redis官方提供的高可用性解決方案,主要用于管理Redis主從架構(gòu),實現(xiàn)自動故障轉(zhuǎn)移監(jiān)控通知。在沒有哨兵模式之前,當(dāng)Redis主節(jié)點宕機時,需要手動進行主從切換并更新應(yīng)用程序配置,這對運維人員來說是極大的負(fù)擔(dān)。有了哨兵模式,這些操作全部自動化,對客戶端透明無縫切換,大大提高了系統(tǒng)的可靠性。

哨兵模式的工作原理

  • 監(jiān)控:哨兵會周期性地向所有Redis節(jié)點發(fā)送PING命令,檢查節(jié)點是否存活。
  • 通知:當(dāng)哨兵發(fā)現(xiàn)某個節(jié)點出現(xiàn)故障時,會通知其他哨兵和客戶端。
  • 自動故障轉(zhuǎn)移:當(dāng)主節(jié)點出現(xiàn)故障時,哨兵會從從節(jié)點中選舉一個新的主節(jié)點,并將其他從節(jié)點指向新的主節(jié)點。

哨兵模式主要功能包括:

  • 監(jiān)控:持續(xù)檢查主節(jié)點和從節(jié)點是否正常運行
  • 通知:當(dāng)監(jiān)控的Redis實例出現(xiàn)問題時,向其他哨兵和客戶端發(fā)送警報
  • 自動故障轉(zhuǎn)移:主節(jié)點故障時自動選擇一個從節(jié)點升級為主節(jié)點,并調(diào)整其他從節(jié)點指向新主節(jié)點

Spring Boot中配置Redis哨兵模式

添加依賴

pom.xml中添加Spring Boot Data Redis依賴,默認(rèn)使用Lettuce客戶端:

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

如果需要使用Jedis客戶端,還需添加:

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

配置文件設(shè)置

application.yml中配置Redis哨兵相關(guān)信息:

spring:
  redis:
    password: your-redis-password  # Redis認(rèn)證密碼
    sentinel:
      master: mymaster  # Redis主節(jié)點名稱
      nodes:  # 哨兵節(jié)點列表
        - 192.168.1.110:26379
        - 192.168.1.111:26379
        - 192.168.1.112:26379
    lettuce:
      pool:  # 連接池配置(可選)
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 5000ms

或者在application.properties中配置:

spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=192.168.1.110:26379,192.168.1.111:26379,192.168.1.112:26379
spring.redis.password=your-redis-password

自定義配置類

如果需要更精細(xì)的控制,可以創(chuàng)建自定義配置類:

@Configuration
public class RedisConfig {
    @Value("${spring.redis.sentinel.nodes}")
    private String sentinelNodes;
    @Value("${spring.redis.sentinel.master}")
    private String sentinelMaster;
    @Bean
    public RedisSentinelConfiguration redisSentinelConfiguration() {
        RedisSentinelConfiguration config = new RedisSentinelConfiguration();
        config.setMaster(sentinelMaster);
        config.setSentinels(Arrays.stream(sentinelNodes.split(","))
                .map(hostAndPort -> {
                    String[] args = hostAndPort.split(":");
                    return new RedisNode(args[0], Integer.parseInt(args[1]));
                })
                .collect(Collectors.toSet()));
        return config;
    }
    @Bean
    public LettuceConnectionFactory lettuceConnectionFactory(RedisSentinelConfiguration redisSentinelConfiguration) {
        LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
                .readFrom(ReadFrom.MASTER_PREFERRED)  // 優(yōu)先從主節(jié)點讀取
                .build();
        return new LettuceConnectionFactory(redisSentinelConfiguration, clientConfig);
    }
    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(lettuceConnectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

使用RedisTemplate操作Redis

配置完成后,可以在服務(wù)中使用RedisTemplate來操作Redis:

@Service
public class UserService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    public void saveUser(String username, String password) {
        redisTemplate.opsForHash().put("users", username, password);
    }
    public String findUser(String username) {
        return (String) redisTemplate.opsForHash().get("users", username);
    }
    // 更多操作方法...
}

創(chuàng)建Controller提供API接口:

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @PostMapping("/add")
    public String addUser(String username, String password) {
        userService.saveUser(username, password);
        return "用戶添加成功";
    }
    @GetMapping("/{username}")
    public String getUser(@PathVariable String username) {
        return userService.findUser(username);
    }
}

讀寫分離配置

Lettuce客戶端支持讀寫分離策略,可以在配置中指定:

LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
    .readFrom(ReadFrom.MASTER_PREFERRED)  // 優(yōu)先從主節(jié)點讀
    .build();

可選讀策略包括:

  • MASTER:只從主節(jié)點讀取
  • MASTER_PREFERRED:優(yōu)先從主節(jié)點讀取,主節(jié)點不可用時從副本讀取
  • REPLICA:只從副本讀取
  • REPLICA_PREFERRED:優(yōu)先從副本讀取,副本不可用時從主節(jié)點讀取

常見問題與解決方案

  • 認(rèn)證失敗錯誤:如果出現(xiàn)"NOAUTH HELLO must be called with the client already HELLO"錯誤,可能需要配置哨兵密碼:
spring:
  redis:
    sentinel:
      password: your-sentinel-password
  • 域名解析問題:如果哨兵返回的是域名而不是IP,需要在本地hosts文件中配置域名解析。
  • 連接池配置:根據(jù)應(yīng)用需求合理配置連接池參數(shù),以提高性能并避免資源耗盡:
lettuce:
  pool:
    max-active: 8    # 最大連接數(shù)
    max-idle: 8      # 最大空閑連接數(shù)
    min-idle: 0      # 最小空閑連接數(shù)
    max-wait: 5000ms # 最大等待時間

最佳實踐

  • 哨兵節(jié)點數(shù)量:生產(chǎn)環(huán)境至少部署3個哨兵節(jié)點,以確保哨兵集群自身的高可用性。
  • 網(wǎng)絡(luò)規(guī)劃:盡量讓應(yīng)用程序節(jié)點和Redis節(jié)點在相同的網(wǎng)絡(luò)環(huán)境下,減少網(wǎng)絡(luò)延遲。
  • 監(jiān)控告警:監(jiān)控Redis實例和哨兵進程的狀態(tài),設(shè)置適當(dāng)?shù)母婢瘷C制。
  • 定期演練:定期進行故障轉(zhuǎn)移演練,驗證系統(tǒng)的可靠性。
  • 客戶端兼容性:確保使用的客戶端版本與Redis服務(wù)器版本兼容。

總結(jié)

Redis哨兵模式為Spring Boot應(yīng)用程序提供了高可用的Redis解決方案,實現(xiàn)了自動故障轉(zhuǎn)移和監(jiān)控功能。通過合理的配置和使用,可以大大提升系統(tǒng)的穩(wěn)定性和可靠性。在實際項目中,應(yīng)根據(jù)業(yè)務(wù)需求選擇合適的配置參數(shù),并遵循最佳實踐,才能充分發(fā)揮Redis哨兵模式的優(yōu)勢。

到此這篇關(guān)于Redis哨兵模式在Spring Boot項目中的使用與實踐完全指南的文章就介紹到這了,更多相關(guān)springboot使用redis哨兵模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • sentinel支持的redis高可用集群配置詳解

    sentinel支持的redis高可用集群配置詳解

    這篇文章主要為大家介紹了sentinel支持的redis高可用集群配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • 編譯安裝redisd的方法示例詳解

    編譯安裝redisd的方法示例詳解

    這篇文章主要介紹了編譯安裝redisd的方法示例詳解,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Redis序列化存儲及日期格式的問題處理

    Redis序列化存儲及日期格式的問題處理

    這篇文章主要介紹了Redis序列化存儲及其日期格式的問題處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 推薦幾款 Redis 可視化工具(太厲害了)

    推薦幾款 Redis 可視化工具(太厲害了)

    這篇文章主要介紹了推薦幾款 Redis 可視化工具,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-04-04
  • Redis高階之容錯切換的實現(xiàn)

    Redis高階之容錯切換的實現(xiàn)

    本文主要介紹了Redis高階之容錯切換的實現(xiàn),當(dāng)一臺主節(jié)點宕機后,從節(jié)點會自動接管成為新的主節(jié)點,當(dāng)原主節(jié)點恢復(fù)后,它不會自動成為主節(jié)點,需要通過手動操作將其重新設(shè)置為從節(jié)點,感興趣的可以了解一下
    2025-02-02
  • Redis中過期鍵刪除的三種方法

    Redis中過期鍵刪除的三種方法

    Redis中可以設(shè)置鍵的過期時間,并且通過取出過期字典(expires dict)中鍵的過期時間和當(dāng)前時間比較來判斷是否過期,那么一個過期的鍵是怎么被刪除的呢?本文給大家總結(jié)了三種方法,選了其中兩種給大家詳細(xì)的介紹一下,需要的朋友可以參考下
    2024-05-05
  • redis隊列和秒殺應(yīng)用方式

    redis隊列和秒殺應(yīng)用方式

    這篇文章主要介紹了redis隊列和秒殺應(yīng)用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 利用Redis的有序集合實現(xiàn)排行榜功能實例代碼

    利用Redis的有序集合實現(xiàn)排行榜功能實例代碼

    這篇文章主要給大家介紹了關(guān)于如何利用Redis的有序集合實現(xiàn)排行榜功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Redis數(shù)據(jù)庫的安裝配置方法

    Redis數(shù)據(jù)庫的安裝配置方法

    redis 是一個高性能的key-value數(shù)據(jù)庫。 redis的出現(xiàn),很大程度補償了memcached這類keyvalue存儲的不足,在部 分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補充作用。它提供了Python,Ruby,Erlang,PHP客戶端,使用很方便
    2014-06-06
  • redis key過期監(jiān)聽的實現(xiàn)示例

    redis key過期監(jiān)聽的實現(xiàn)示例

    在Redis中,我們可以為Key設(shè)置過期時間,當(dāng)Key的過期時間到達后,Redis會自動將該Key標(biāo)記為已失效,本文就來介紹一下redis key過期監(jiān)聽的實現(xiàn)示例,感興趣的可以了解一下
    2024-03-03

最新評論

鹤山市| 天等县| 西青区| 庐江县| 石柱| 鲁山县| 连南| 白山市| 平远县| 海盐县| 清新县| 阳新县| 浙江省| 漯河市| 喜德县| 新乡市| 永嘉县| 光泽县| 凉城县| 贵德县| 黑龙江省| 广饶县| 长兴县| 青铜峡市| 屏边| 阿瓦提县| 大化| 普兰县| 耒阳市| 长岛县| 萨嘎县| 临朐县| 策勒县| 新沂市| 深州市| 宁乡县| 岚皋县| 新泰市| 马关县| 湖南省| 枣强县|