在springboot項目中是否可以使用兩個不同地址的redis

在Spring Boot項目中可以通過多數據源配置的方式使用兩個不同地址的Redis實例。以下是具體實現方案

1.依賴配置

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

2.配置文件設置

application.yml中分別定義兩個Redis實例的配置項

spring:redis:redis1:host: 192.168.1.100port: 6379password: pass1database: 0redis2:host: 192.168.1.101port: 6380password: pass2database: 1

3.配置類創建

為每個Redis實例創建獨立的RedisConnectionFactoryRedisTemplate

@Configuration
public class RedisConfig {// Redis實例1配置@Bean(name = "redis1ConnectionFactory")public RedisConnectionFactory redis1ConnectionFactory(@Value("${spring.redis.redis1.host}") String host,@Value("${spring.redis.redis1.port}") int port) {RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host, port);config.setPassword(RedisPassword.of("pass1"));return new JedisConnectionFactory(config);}@Bean(name = "redis1Template")public RedisTemplate<String, Object> redis1Template(@Qualifier("redis1ConnectionFactory") RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));return template;}// 重復上述步驟配置Redis實例2
}

4.使用不同Redis示例

在業務代碼中通過@Qualifier注入對應的模板:

@Autowired
@Qualifier("redis1Template")
private RedisTemplate<String, Object> redis1Template;@Autowired
@Qualifier("redis2Template")
private RedisTemplate<String, Object> redis2Template;

注意事項

  1. ?連接池優化?
    需為每個實例單獨配置連接池參數(如最大連接數、超時時間),避免資源競爭。例如在配置文件中添加max-activemax-idle等參數。

  2. ?主從與集群區分?
    若兩個Redis實例為集群模式,需使用RedisClusterConfiguration替代RedisStandaloneConfiguration

  3. ?序列化兼容性?
    建議統一使用Jackson2JsonRedisSerializerStringRedisSerializer,避免不同模板序列化方式不一致導致數據讀取失敗。

  4. ?動態切換?
    若需運行時動態切換數據源,可通過RedisTemplate.setConnectionFactory()方法實現,但需注意線程安全問題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82439.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82439.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JMeter 教程:監控性能指標 - 第三方插件安裝(PerfMon)

目錄 【簡單介紹】 ? PerfMon 插件是什么&#xff1f; &#x1f6e0;? 安裝 PerfMon 插件 方法一&#xff1a;使用 JMeterPluginsManager 安裝&#xff08;推薦&#xff09; &#x1f50c; 安裝完成后組件介紹 &#x1f310; 服務端安裝 ServerAgent&#xff08;用于被…

【后端高階面經:數據庫篇】19、分庫分表查詢困境:無分庫分表鍵時的高效應對

一、分庫分表下的無分片鍵查詢困境 在分布式數據庫架構中,分庫分表通過分片鍵(如買家ID)將數據分散存儲,顯著提升了單表性能和系統擴展性。然而,當業務需要從非分片鍵維度(如賣家ID)進行查詢時,傳統架構暴露出以下核心問題: 1.1 跨分片掃描的性能災難 數據分散性:以…

ARM架構

目錄 哈佛結構 arm指令格式 有符號數的溢出&#xff08;8bit)? 無符號數的進位/借位 CPSR&#xff08;當前程序狀態寄存器&#xff09; ARM模式 arm異常類型 ARMv7架構異常向量表 arm異常的處理流程 arm寄存器 堆棧指針寄存器 arm模式切換流程 LDR指令、STR指令 指…

canvas(三)-動畫3d

在 <canvas> 中實現 3D 動畫通常需要借助 WebGL 技術,因為原生的 2D 上下文(CanvasRenderingContext2D)無法直接支持 3D 渲染。WebGL 是基于 OpenGL ES 2.0 的 JavaScript API,可以直接在瀏覽器中實現高性能的 3D 圖形渲染。以下是關于 <canvas> 3D 動畫的概念…

右鍵打開 pycharm 右鍵 pycharm

文件夾右鍵打開pycharm aaa.reg notepad 右下角把文件格式改為&#xff1a;ansi Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Directory\Background\shell\PyCharm] "Open with PyCharm" "Icon""\"D:\\soft\\PyCharm 2024.1.4\\bi…

一張紙決定的高度

從我捧起《格局》這個本書開始&#xff0c;轉眼間兩個月過去了。 回頭望一望&#xff0c;好似還在昨天。 這兩個月&#xff0c;心態在變&#xff0c;前進的方向在變&#xff0c;但唯一不變的就是每天晚上睡前&#xff0c;留給自己十分鐘的讀書時光。 我也從來沒想過&#xf…

R 語言科研繪圖 --- 熱力圖-匯總

在發表科研論文的過程中&#xff0c;科研繪圖是必不可少的&#xff0c;一張好看的圖形會是文章很大的加分項。 為了便于使用&#xff0c;本系列文章介紹的所有繪圖都已收錄到了 sciRplot 項目中&#xff0c;獲取方式&#xff1a; R 語言科研繪圖模板 --- sciRplothttps://mp.…

新手到資深的Java開發編碼規范

新手到資深的開發編碼規范 一、前言二、命名規范&#xff1a;代碼的 “第一印象”2.1 標識符命名原則2.2 命名的 “自描述性” 原則2.3 避免魔法值 三、代碼格式規范&#xff1a;結構清晰的視覺美學3.1 縮進與空格3.2 代碼塊規范3.3 換行與斷行 四、注釋規范&#xff1a;代碼的…

鴻蒙倉頡開發語言實戰教程:實現商城應用詳情頁

昨天有朋友提到鴻蒙既然有了ArkTs開發語言&#xff0c;為什么還需要倉頡開發語言。其實這個不難理解&#xff0c;安卓有Java和Kotlin&#xff0c;iOS先后推出了Objective-C和Swift&#xff0c;鴻蒙有兩種開發語言也就不奇怪了。而且倉頡是比ArkTs更加靈活的語言&#xff0c;雖然…

CNN手寫數字識別/全套源碼+注釋可直接運行

數據集選擇&#xff1a; MNIST數據集來自美國國家標準與技術研究所, National Institute of Standards and Technology (NIST)。訓練集&#xff08;training set&#xff09;由來自250個不同人手寫的數字構成&#xff0c;其中50%是高中學生&#xff0c;50%來自人口普查局&…

探秘谷歌Gemini:開啟人工智能新紀元

一、引言 在人工智能的浩瀚星空中&#xff0c;每一次重大模型的發布都宛如一顆璀璨新星閃耀登場&#xff0c;而谷歌 Gemini 的亮相&#xff0c;無疑是其中最為耀眼的時刻之一。它的出現&#xff0c;猶如在 AI 領域投下了一顆重磅炸彈&#xff0c;引發了全球范圍內的廣泛關注與熱…

小白場成長之路-計算機網絡(三)

文章目錄 一、網絡參數配置1.圖形化配置2.命令行配置2.1、ifconfig命令2.2ifup和ifdown子接口配置 2.3 多ip地址配置2.4子接口配置 總結 一、網絡參數配置 1.圖形化配置 NetworkManager&#xff0c;Linux7系統中&#xff0c;一般建議停止該管理方式&#xff1b;Linux8以上操作…

WireShark網絡抓包—詳細教程

本文僅用于技術研究&#xff0c;禁止用于非法用途。 Wireshark入門指南&#xff1a;從零開始掌握網絡抓包分析 一、Wireshark是什么&#xff1f; Wireshark 是全球最受歡迎的開源網絡協議分析工具&#xff0c;被廣泛應用于網絡故障排查、協議學習、網絡安全分析等領域。它支…

區塊鏈DApp的開發技術方案

區塊鏈DApp開發技術方案&#xff1a;架構設計與實踐指南 引言&#xff1a;DApp的技術革新與生態價值 區塊鏈技術的去中心化特性與智能合約的自動化執行能力&#xff0c;推動DApp&#xff08;去中心化應用&#xff09;成為Web3.0的核心載體。截至2025年&#xff0c;全球DApp用…

Linux(3)——基礎開發工具

目錄 一、軟件包管理器——yum 1.Linux下安裝程序的方式 2.什么是yum 3.查找軟件包 4.安裝軟件 5.本地與服務器端進行文件互傳 6.卸載軟件 二、Linux的編輯器——vim 1.基本概念 2.vim下各個模式之間的切換 3.vim在命令行模式下的命令匯總 4.vim在底行模式下的命令…

大數據學習(121)-sql重點問題

&#x1f34b;&#x1f34b;大數據學習&#x1f34b;&#x1f34b; &#x1f525;系列專欄&#xff1a; &#x1f451;哲學語錄: 用力所能及&#xff0c;改變世界。 &#x1f496;如果覺得博主的文章還不錯的話&#xff0c;請點贊&#x1f44d;收藏??留言&#x1f4dd;支持一…

【QT】QString和QStringList去掉空格的方法總結

目錄 一、QString去掉空格 1. 移除字符串首尾的空格&#xff08;trimmed&#xff09; 2. 移除字符串中的所有空格&#xff08;remove&#xff09; 3. 僅移除左側&#xff08;開頭&#xff09;或右側&#xff08;結尾&#xff09;空格 4. 替換多個連續空格為單個空格 5. 移…

電腦 IP 地址修改工具,輕松實現異地登陸

在互聯網時代&#xff0c;異地登陸需求日益頻繁 —— 訪問區域限制內容、跨區協作、優化游戲體驗等場景&#xff0c;都需要通過修改 IP 地址實現。 一、IP 地址基礎認知 IP 地址是設備的網絡身份標識&#xff0c;不同地區分配不同 IP 段。通過修改 IP&#xff0c;可模擬目標地…

[BUG]Debian/Linux操作系統中 安裝 curl等軟件顯示無候選安裝(E: 軟件包 curl 沒有可安裝候選)

本文內容組織形式 問題描述失效原因解決方案首先修改源列表為國內確認當前系統的版本Debian 11 (Bullseye)Debian 12 (Bookworm) 執行系統升級更新系統重新安裝curl 結語 問題描述 日期&#xff1a;20250526 操作系統&#xff1a; debian darkchunkdebian:/home$ sudo apt i…

leetcode hot100刷題日記——12.反轉鏈表

解答&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(n…