SpringBoot2.0整合Redis(Lettuce版本)

前言:

目前java操作redis的客戶端有jedis跟Lettuce。在springboot1.x系列中,其中使用的是jedis,
但是到了springboot2.x其中使用的是Lettuce。 因為我們的版本是springboot2.x系列,所以今天使用的是Lettuce。關于jedis跟lettuce的區別:Lettuce 和 Jedis 的定位都是Redis的client,所以他們當然可以直接連接redis server。Jedis在實現上是直接連接的redis server,如果在多線程環境下是非線程安全的,這個時候只有使用連接池,
為每個Jedis實例增加物理連接Lettuce的連接是基于Netty的,連接實例(StatefulRedisConnection)可以在多個線程間并發訪問,
應為StatefulRedisConnection是線程安全的,所以一個連接實例(StatefulRedisConnection)就可以滿足多線程環境下的并發訪問,
當然這個也是可伸縮的設計,一個連接實例不夠的情況也可以按需增加連接實例。

依賴:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.1.3.RELEASE</version></dependency><!-- test單元測試用 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- redis依賴commons-pool 這個依賴一定要添加 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.6.2</version></dependency>
</dependencies>

application.yml配置

server:port: 8989
spring:redis:host: 127.0.0.1port: 6379# 密碼 沒有則可以不填password: 123456# 如果使用的jedis 則將lettuce改成jedis即可lettuce:pool:# 最大活躍鏈接數 默認8max-active: 8# 最大空閑連接數 默認8max-idle: 8# 最小空閑連接數 默認0min-idle: 0

redis配置

    接下來我們需要配置redis的key跟value的序列化方式,默認使用的JdkSerializationRedisSerializer 這樣的會導致我們
通過redis desktop manager顯示的我們key跟value的時候顯示不是正常字符。 所以我們需要手動配置一下序列化方式 新建一個
config包,在其下新建一個RedisConfig.java 具體代碼如下/*** @Auther: yukong* @Date: 2018/8/17 14:58* @Description: redis配置*/
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisConfig {/*** 配置自定義redisTemplate* @return*/@BeanRedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);//使用Jackson2JsonRedisSerializer來序列化和反序列化redis的value值Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper mapper = new ObjectMapper();mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);serializer.setObjectMapper(mapper);template.setValueSerializer(serializer);//使用StringRedisSerializer來序列化和反序列化redis的key值template.setKeySerializer(new StringRedisSerializer());template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(serializer);template.afterPropertiesSet();return template;}}其中@Configuration 代表這個類是一個配置類,然后@AutoConfigureAfter(RedisAutoConfiguration.class) 是讓我們這個配置類
在內置的配置類之后在配置,這樣就保證我們的配置類生效,并且不會被覆蓋配置。其中需要注意的就是方法名一定要
叫redisTemplate 因為@Bean注解是根據方法名配置這個bean的name的。

測試

package com.netcast.demo;import com.netcast.demo.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;/*** @program: demo* @description:* @author: dchen* @create: 2019-11-14 14:53**/
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void redisTest() {// redis存儲數據String key = "name";redisTemplate.opsForValue().set(key, "yukong");// 獲取數據String value = (String) redisTemplate.opsForValue().get(key);System.out.println("獲取緩存中key為" + key + "的值為:" + value);User user = new User();user.setId("2");user.setName("yukong");user.setPhone("155662727272");String userKey = "yukong";redisTemplate.opsForValue().set(userKey, user);User newUser = (User) redisTemplate.opsForValue().get(userKey);System.out.println("獲取緩存中key為" + userKey + "的值為:" + newUser);}
}

結果:

中文成功顯示,并且對象在redis以json方式存儲,代表我們配置成功。下列的就是Redis其它類型所對應的操作方式opsForValue: 對應 String(字符串)
opsForZSet: 對應 ZSet(有序集合)
opsForHash: 對應 Hash(哈希)
opsForList: 對應 List(列表)
opsForSet: 對應 Set(集合)

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

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

相關文章

qt + opengl 給立方體增加陰影

在前幾篇文章里面學會了通過opengl實現一個立方體&#xff0c;那么這篇我們來學習光照。 風氏光照模型的主要結構由3個分量組成&#xff1a;環境(Ambient)、漫反射(Diffuse)和鏡面(Specular)光照。下面這張圖展示了這些光照分量看起來的樣子&#xff1a; 1 環境光照(Ambient …

大模型工具大比拼:SGLang、Ollama、VLLM、LLaMA.cpp 如何選擇?

簡介&#xff1a;在人工智能飛速發展的今天&#xff0c;大模型已經成為推動技術革新的核心力量。無論是智能客服、內容創作&#xff0c;還是科研輔助、代碼生成&#xff0c;大模型的身影無處不在。然而&#xff0c;面對市場上琳瑯滿目的工具&#xff0c;如何挑選最適合自己的那…

stream流常用方法

1.reduce 在Java中&#xff0c;可以使用Stream API的reduce方法來計算一個整數列表的乘積。reduce方法是一種累積操作&#xff0c;它可以將流中的元素組合起來&#xff0c;返回單個結果。對于計算乘積&#xff0c;你需要提供一個初始值&#xff08;通常是1&#xff0c;因為乘法…

pgAdmin4在mac m1上面簡單使用(Docker)

問題 想要在本地簡單了解一下pgAdmin4一些簡單功能。故需要在本機先安裝看一看。 安裝步驟 拉取docker鏡像 docker pull dpage/pgadmin4直接簡單運行pgAdmin4 docker run --name pgAdmin4 -p 5050:80 \-e "PGADMIN_DEFAULT_EMAILuserdomain.com" \-e "PGAD…

ubuntu下安裝TFTP服務器

在 Ubuntu 系統下安裝和配置 TFTP&#xff08;Trivial File Transfer Protocol&#xff09;服務器可以按照以下步驟進行&#xff1a; 1. 安裝 TFTP 服務器軟件包 TFTP 服務器通常使用 tftpd-hpa 軟件包&#xff0c;你可以使用以下命令進行安裝&#xff1a; sudo apt update …

Softing線上研討會 | 自研還是購買——用于自動化產品的工業以太網

| 線上研討會時間&#xff1a;2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太網的通信在工業自動化網絡中的重要性日益增加。設備制造商正面臨著一大挑戰——如何快速、有效且經濟地將工業以太網協議集成到其產品中。其中的關鍵問題包括&#xff1a;是否只需集成單一的工…

vscode創建java web項目

一.項目部署 1.shiftctrlp&#xff0c;選擇java項目 2.選擇maven create from arcetype 3.選擇webapp 4.目錄結構如下&#xff0c;其中index.jsp是首頁 5.找到左下角的servers,添加tomcat服務器 選擇 再選擇&#xff1a; 找到你下載的tomcat 的bin目錄的上一級目錄&#x…

C語言指針學習筆記

1. 指針的定義 指針&#xff08;Pointer&#xff09;是存儲變量地址的變量。在C語言中&#xff0c;指針是一種非常重要的數據類型&#xff0c;通過指針可以直接訪問和操作內存。 2. 指針的聲明與初始化 2.1 指針聲明 指針變量的聲明格式為&#xff1a;數據類型 *指針變量名…

DeepSeek R1生成圖片總結2(雖然本身是不能直接生成圖片,但是可以想辦法利用別的工具一起實現)

DeepSeek官網 目前階段&#xff0c;DeepSeek R1是不能直接生成圖片的&#xff0c;但可以通過優化文本后轉換為SVG或HTML代碼&#xff0c;再保存為圖片。另外&#xff0c;Janus-Pro是DeepSeek的多模態模型&#xff0c;支持文生圖&#xff0c;但需要本地部署或者使用第三方工具。…

什么是Dubbo?Dubbo框架知識點,面試題總結

本篇包含什么是Dubbo&#xff0c;Dubbo的實現原理&#xff0c;節點角色說明&#xff0c;調用關系說明&#xff0c;在實際開發的場景中應該如何選擇RPC框架&#xff0c;Dubbo的核心架構&#xff0c;Dubbo的整體架構設計及分層。 主頁還有其他的面試資料&#xff0c;有需要的可以…

kafka消費能力壓測:使用官方工具

背景 在之前的業務場景中&#xff0c;我們發現Kafka的實際消費能力遠低于預期。盡管我們使用了kafka-go組件并進行了相關測試&#xff0c;測試情況見《kafka-go:性能測試》這篇文章。但并未能準確找出消費能力低下的原因。 我們曾懷疑這可能是由我的電腦網絡帶寬問題或Kafka部…

【大學生職業規劃大賽備賽PPT資料PDF | 免費共享】

自取鏈接&#xff1a; 鏈接&#xff1a;https://pan.quark.cn/s/4fa45515325e &#x1f4e2; 同學&#xff0c;你是不是正在為職業規劃大賽發愁&#xff1f; 想展示獨特思路卻不知如何下手&#xff1f; 想用專業模板卻找不到資源&#xff1f; 別擔心&#xff01;我整理了全網…

ubuntu20動態修改ip,springboot中yaml的內容的讀取,修改,寫入

文章目錄 前言引入包yaml原始內容操作目標具體代碼執行查看結果總結: 前言 之前有個需求&#xff0c;動態修改ubuntu20的ip&#xff0c;看了下&#xff1a; 本質上是修改01-netcfg.yaml文件&#xff0c;然后執行netplan apply就可以了。 所以&#xff0c;需求就變成了 如何對ya…

【算法】雙指針(下)

目錄 查找總價格為目標值的兩個商品 暴力解題 雙指針解題 三數之和 雙指針解題(左右指針) 四數之和 雙指針解題 雙指針關鍵點 注意事項 查找總價格為目標值的兩個商品 題目鏈接&#xff1a;LCR 179. 查找總價格為目標值的兩個商品 - 力扣&#xff08;LeetCode&#x…

Windows 圖形顯示驅動開發-IoMmu 模型

輸入輸出內存管理單元 (IOMMU) 是一個硬件組件&#xff0c;它將支持具有 DMA 功能的 I/O 總線連接到系統內存。 它將設備可見的虛擬地址映射到物理地址&#xff0c;使其在虛擬化中很有用。 在 WDDM 2.0 IoMmu 模型中&#xff0c;每個進程都有一個虛擬地址空間&#xff0c;即&a…

軟件測評報告包括哪些內容?第三方軟件測評機構推薦

在當今信息技術飛速發展的時代&#xff0c;軟件的品質與性能直接影響到企業的運營效率和市場競爭力。為了確保軟件的可用性和可靠性&#xff0c;軟件測評成為一個不可或缺的環節&#xff0c;軟件測評報告也是對軟件產品進行全面評估后形成的一份文檔&#xff0c;旨在系統地紀錄…

深淺拷貝區別,怎么區別使用

在 JavaScript 中&#xff0c;深拷貝&#xff08;Deep Copy&#xff09; 和 淺拷貝&#xff08;Shallow Copy&#xff09; 是兩種不同的對象復制方式&#xff0c;它們的區別主要體現在對嵌套對象的處理上。以下是它們的詳細對比及使用場景&#xff1a; 1. 淺拷貝&#xff08;Sh…

tailscale + derp中繼 + 阿里云服務器 (無域名版)

使用tailscale默認的中轉節點延遲很高&#xff0c;因為服務器都在國外。 感謝大佬提供的方案&#xff1a;Tailscale 搭建derp中繼節點&#xff0c;不需要域名&#xff0c;不需要備案&#xff0c;不需要申請證書&#xff08;最新&#xff09; - yafeng - 博客園 基于這個方案&…

【異常錯誤】pycharm debug view變量的時候顯示不全,中間會以...顯示

異常問題&#xff1a; 這個是在新版的pycharm中出現的&#xff0c;出現的問題&#xff0c;點擊view后不全部顯示&#xff0c;而是以...折疊顯示 在setting中這么設置一下就好了&#xff1a; 解決辦法&#xff1a; https://youtrack.jetbrains.com/issue/PY-75568/Large-stri…

【DeepSeek系列】04 DeepSeek-R1:帶有冷啟動的強化學習

文章目錄 1、簡介2、主要改進點3、兩個重要觀點4、四階段后訓練詳細步驟4.1 冷啟動4.2 推理導向的強化學習4.3 拒絕采樣和有監督微調4.4 針對所有場景的強化學習 5、蒸餾與強化學習對比6、評估6.1 DeepSeek-R1 評估6.2 蒸餾模型評估 7、結論8、局限性與未來方向 1、簡介 DeepS…