Spring boot使用集群方式、支持ssl連接redis的方法

1、需求背景

?項目需要提供一個管理界面給內部人員操作用戶信息,需要在修改用戶信息后刪除用戶的redis緩存。用戶所在的區域不同,其redis服務地址也不相同,因此需要管理多個redis連接,且redis要求以集群方式并支持ssl進行連接。

2、實現方案

?為每個區域定義一個regionId,用來關聯不同區域的redis連接信息,將redis連接信息存于數據庫中。采用工具類的方式,構建RedisTemplate對象存于以Map形式存于工具類中的靜態變量當中,key為regionId,value為RedisTemplate。每個RedisTemplate構建時機為第一次需要用到它時。

3、具體實現

1、首先是存儲redis信息的實體類

public class RedisInfo {private String regionId;private String ip;private int port;private String pwd;// 是否使用sslprivate boolean ssl;// 超時時間private long timeout;
}

2、其次是工具類的實現

public class RedisManage {private static Map<String, RedisTemplate<String, Object>> redisTemplateMap = new HashMap<>();/*** 獲取RedisTemplate方法* @param redisInfo 數據庫連接信息* @return*/public static RedisTemplate<String, Object> getRedisTemplate(RedisInfo redisInfo) {// 首先從map中獲取RedisTemplate<String, Object> redisTemplate = redisTemplateMap.get(redisInfo.getRegionId());// 獲取不到就構建一個并存入redisif (redisTemplate == null) {// redis連接配置RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();redisStandaloneConfiguration.setHostName(redisInfo.getIp());redisStandaloneConfiguration.setPort(redisInfo.getPort());redisStandaloneConfiguration.setPassword(RedisPassword.of(redisInfo.getPwd()));// 創建 LettuceClientConfiguration,用于構建LettuceConnectionFactoryLettuceClientConfiguration.LettuceClientConfigurationBuilder builder = LettuceClientConfiguration.builder().commandTimeout(Duration.ofMillis(redisInfo.getTimeout())).shutdownTimeout(Duration.ofMillis(redisInfo.getTimeout()));// 根據需要啟用sslif (redisInfo.isSsl()) {builder.useSsl();}// 創建 LettuceConnectionFactory,集群連接的關鍵LettuceConnectionFactory factory = new LettuceConnectionFactory(redisStandaloneConfiguration, builder.build());// 重要,調用afterPropertiesSet才能正常使用factory.afterPropertiesSet();redisTemplate = new RedisTemplate();redisTemplate.setConnectionFactory(factory);// 將對象屬性名序列化成string類型的key,并將string類型的key反序列化成屬性名StringRedisSerializer keySerializer = new StringRedisSerializer();// 數據綁定工具,操作redis時需要對key和value進行序列化和反序列化,這個對象可以設置規范ObjectMapper mapper = new ObjectMapper();// 反序列化時遇到未知屬性不拋出異常mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);// 序列化空bean時不拋出異常mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);// 反序列化時對象的成員變量與緩存中的對象類型對不上或代碼中不存在該類時,不拋出異常mapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, false);// 序列化時間字段時,以文本形式序列序列化而非時間戳mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);// 支持Java8的日期類型,如LocalDate、LocalTime、LocalDateTime等mapper.registerModule(new JavaTimeModule());// 序列化時保留對象類型信息mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);// 序列化和反序列化工具,使用jackson庫將對象序列化成json字符串,并將json字符串反序列化成對象,應用了上面ObjectMapper的各項規范RedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer(mapper);redisTemplate.setKeySerializer(keySerializer);redisTemplate.setValueSerializer((RedisSerializer)valueSerializer);redisTemplate.setHashKeySerializer(keySerializer);redisTemplate.setHashValueSerializer((RedisSerializer)valueSerializer);// 重要,非托管Spring容器構建的RedisTemplate需要調用afterPropertiesSet()方法redisTemplate.afterPropertiesSet();redisTemplateMap.put(redisInfo.getRegionId(), redisTemplate);}return redisTemplate;}}

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

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

相關文章

Qt for android 獲取USB設備列表(一)Java方式 獲取

簡介 QtActivity 作為 Qt 應用程序的入口點&#xff0c;負責啟動和配置 Qt 應用程序的信息&#xff0c; 后面我們繼承 QtActivity 做自定義控制&#xff0c;了解一下 Activity 生命周期概念&#xff0c; 因為 QtActivity 繼承自Android的activity&#xff0c;使用周期函數完成我…

java8新特性——函數式編程詳解

目錄 一 概述1.1 背景1.2 函數式編程的意義1.3 函數式編程的發展 Lambda表達式1.1 介紹1.2 使用Lambda的好處1.3 Lambda方法1.3.1 Lambda表達式結構1.3.2 Lambda表達式的特征 1.4 Lambda的使用1.4.1 定義函數式接口1.4.2 Lambda表達式實現函數式接口1.4.3 簡化Lambda表達式1.4.…

C++學習/復習4--與類相關的概念/默認成員函數/運算符重載/Date類實現案例

一、類和對象 1.本章概要 2.C中的結構體(struct與class) 升級為類 &#xff08;1&#xff09;類及成員函數的兩種定義方式 聲明與定義分離 &#xff08;2&#xff09;權限 注意1&#xff1a;struct/class在權限上的區別 &#xff08;3&#xff09;封裝 &#xff08;4&#x…

AI學習指南數學工具篇-凸優化之對偶性與拉格朗日對偶

AI學習指南數學工具篇-凸優化之對偶性與拉格朗日對偶 在凸優化中&#xff0c;對偶性是一個非常重要的概念。通過對偶性&#xff0c;我們可以將原始問題轉化為對偶問題&#xff0c;從而更容易求解。其中&#xff0c;拉格朗日對偶問題是對偶性的一個重要應用&#xff0c;通過拉格…

《Ai學習筆記》自然語言處理 (Natural Language Processing):機器閱讀理解-基礎概念解析01

自然語言處理 (Natural Language Processing)&#xff1a; NLP四大基本任務 序列標注&#xff1a; 分詞、詞性標注 分類任務&#xff1a; 文本分類、情感分析 句子關系&#xff1a;問答系統、對話系統 生成任務&#xff1a;機器翻譯、文章摘要 機器閱讀理解的定義 Machi…

LangChain - 建立代理

本文翻譯整理自&#xff1a;Build an Agent https://python.langchain.com/v0.2/docs/tutorials/agents/ 文章目錄 一、說明概念 二、定義工具1、TavilyAPI參考&#xff1a; 2、RetrieverAPI參考&#xff1a;API參考&#xff1a; 3、工具 三、使用語言模型四、創建代理五、運行…

《安富萊嵌入式周報》第337期:超高性能信號量測量,協議分析的開源工具且核心算法開源,工業安全應用的雙通道數字I/O模組,低成本腦機接口,開源音頻合成器

周報匯總地址&#xff1a;http://www.armbbs.cn/forum.php?modforumdisplay&fid12&filtertypeid&typeid104 視頻版&#xff1a; https://link.zhihu.com/?targethttps%3A//www.bilibili.com/video/BV1PT421S7TR/ 《安富萊嵌入式周報》第337期&#xff1a;超高性…

【Spring Boot】分層開發 Web 應用程序(含實例)

分層開發 Web 應用程序 1.應用程序分層開發模式&#xff1a;MVC1.1 了解 MVC 模式1.2 MVC 和三層架構的關系 2.視圖技術 Thymeleaf3.使用控制器3.1 常用注解3.1.1 Controller3.1.2 RestController3.1.3 RequestMapping3.1.4 PathVariable 3.2 將 URL 映射到方法3.3 在方法中使用…

用戶數據報協議UDP實現可靠傳輸的思路

一、UDP協議的特點 按照報文來分割發送。不需要建立連接和維護連接。不需要接收確認。速度較快。不確保接收的順序和發送順序一樣。 二、用UDP實現可靠通信的思路 (一)接收時發送一個確認報文 實現接收確認的機制。 (二)每個報文騰出空間放置序號 發送時設置序號&#xff0c…

如何安裝虛擬機Wmware,并且在虛擬機中使用centos系統

1. 前言 大家好&#xff0c;我是jiaoxingk 本篇文章主要講解如何安裝虛擬機&#xff0c;并且在虛擬機中安裝centos系統&#xff0c;讓windows電腦也能夠使用Linux系統 2. 虛擬機的介紹 在安裝Vmware之前&#xff0c;我們先做虛擬機的介紹 虛擬機&#xff1a;通過軟件虛擬出來的…

Docker拉取鏡像報錯:x509: certificate has expired or is not yet v..

太久沒有使用docker進行鏡像拉取&#xff0c;今天使用docker-compose拉取mongo發現報錯&#xff08;如下圖&#xff09;&#xff1a; 報錯信息翻譯&#xff1a;證書已過期或尚未有效。 解決辦法&#xff1a; 1.一般都是證書問題或者系統時間問題導致&#xff0c;可以先執行 da…

用HAL庫改寫江科大的stm32入門例子-6-2 定時器外部時鐘

實驗目的&#xff1a; 熟悉外部時鐘的應用。 實驗步驟&#xff1a; 創建項目參照前面的文章&#xff0c;集成oled(沒有oled,用uart串口傳遞也可以)選擇外部時鐘源時鐘源參數設置編寫代碼&#xff1a; 5.1聲明全局變量&#xff0c;如果發生定時器中斷的時候&#xff0c;在回調…

SW 零件插入零件的重合配合

重合配合有時候會失效,可以先用距離配合代替,之后修改距離盡量接近

AI網絡爬蟲-自動獲取百度實時熱搜榜

工作任務和目標&#xff1a;自動獲取百度實時熱搜榜的標題和熱搜指數 標題&#xff1a;<div class"c-single-text-ellipsis"> 東部戰區臺島戰巡演練模擬動畫 <!--48--></div> <div class"hot-index_1Bl1a"> 4946724 </div> …

【bash】統計服務器信息腳本

起因 寫一個bash腳本統計服務器的機器名、內網IP、CPU使用率、內存使用率、List{GPU使用率、顯存} 腳本 #!/bin/bash# 主機名 hostname$(hostname) # 內網ip ip$(ip addr | grep inet | grep -v 127.0.0.1 | awk {print $2} | cut -d/ -f1) ip$(echo "$ip"|tr \n…

Excel表格在線解密:輕松解密密碼,快速恢復數據

忘記了excel表格密碼&#xff1f;教你簡單兩步走&#xff1a;具體步驟如下。首先&#xff0c;在百度搜索中鍵入“密碼帝官網”。其次&#xff0c;點擊“立即開始”&#xff0c;在用戶中心上傳表格文件即可找回密碼。這種方法不用下載軟件&#xff0c;操作簡單易行&#xff0c;適…

【DZ模板】價值288克米設計APP手機版DZ模板 數據本地化+完美使用

模版介紹 【DZ模板】價值288克米設計APP手機版DZ模板 數據本地化完美使用 騰訊官方出品discuz論壇DIY的后臺設置&#xff0c;功能齊全&#xff0c;論壇功能不亞于葫蘆俠&#xff0c;自定義馬甲&#xff0c;自定義認證&#xff0c;自定義廣告&#xff0c;完全可以打造出自己想…

元本學堂是什么?杜旭東疑似再翻車!

杜旭東&#xff0c;1956年1月7日出生于中國北京市&#xff0c;畢業于解放軍藝術學院&#xff0c;中國內地男演員、國家一級演員&#xff01; 2023年11月17日晚&#xff0c;杜旭東在其個人社交媒體上發布視頻&#xff0c;就其以前給緬北電詐集團的白家成員錄制慶生視頻一事道歉…

C++11std::bind的簡單使用

std::bind用來將可調用對象與其參數一起進行綁定&#xff0c;綁定后的結果可以用std::function&#xff08;可調用對象包裝器&#xff09;進行保存&#xff0c;并延遲調用到任何我們需要的時候。 通俗來講&#xff0c;它主要有兩大作用&#xff1a; &#xff08;1&#xff09…