點評項目(Redis中間件)第二部分Redis基礎

Redis的java客戶端

spring整合了前三種我們只需要學習spring整合的就行了。不過還是有企業使用老一套的原生的jedis。

jedis

操作

引入依賴

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

建立連接

private Jedis jedis;@BeforeEach
void setUp() {// 建立連接jedis = new Jedis("192.168.150.101", 6379);// 設置密碼jedis.auth("123321");// 選擇庫jedis.select(0);
}

測試

@Test
void testString() {// 插入數據,方法名稱就是 redis 命令名稱,非常簡單String result = jedis.set("name", "張三");System.out.println("result = " + result);// 獲取數據String name = jedis.get("name");System.out.println("name = " + name);
}

釋放

@AfterEach
void tearDown() {// 釋放資源if (jedis != null) {jedis.close();}
}

jedis連接池

因為是jedis是單線程,所以一但出現多線程調用一個實例就會出現線程安全問題,而且頻繁的創建和銷毀對象實例是有很大的性能損耗,所以我們需要設置多個實例交給連接池來管理。?

public class JedisConnectionFactory {private static final JedisPool jedisPool;static {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();// 最大連接jedisPoolConfig.setMaxTotal(8);// 最大空閑連接jedisPoolConfig.setMaxIdle(8);// 最小空閑連接jedisPoolConfig.setMinIdle(0);// 設置最長等待時間,msjedisPoolConfig.setMaxWaitMillis(200);jedisPool = new JedisPool(jedisPoolConfig, "192.168.150.101", 6379, 1000, "123321");}// 獲取Jedis對象public static Jedis getJedis() {return jedisPool.getResource();}
}

這個代碼里面有static代碼塊,這是一個靜態代碼塊。它里面的代碼會在類被加載到 JVM 時執行一次,并且只執行一次。它在任何對象創建之前,甚至在?main?方法執行之前就可能被執行。用來初始化?static?的?jedisPool。當?JedisConnectionFactory?類第一次被使用(比如調用?getJedis()?方法)時,JVM 會加載這個類,并自動執行這個靜態代碼塊,完成連接池的配置和創建。之后,這個創建好的?jedisPool?就可以被所有地方共享使用了。

這里提供一個簡單、全局的入口點來獲取 Jedis 連接。使用者不需要關心?JedisConnectionFactory?的內部細節,也不需要自己去創建這個工廠類的對象,直接調用?JedisConnectionFactory.getJedis()?就能得到一個連接。這是一種常見的“工廠模式”或“工具類”設計。

SpringDataRedis

操作

引入依賴

springboot里面引入了SpringDataRedis這個依賴不用手動導包。

連接池需要自己導入。

<!-- Redis依賴 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 連接池依賴 -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>

配置文件

spring:redis:host: 192.168.150.101port: 6379password: 123321lettuce:pool:max-active: 8 # 最大連接max-idle: 8 # 最大空閑連接min-idle: 0 # 最小空閑連接max-wait: 100 # 連接等待時間

spring默認連接池實現的是lettuce,如果要用jedis還需要自己手動導入依賴。

注入

@Autowired
private RedisTemplate<String, Object> redisTemplate;

測試

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class RedisTest {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Testvoid testString() {// 插入一條string類型數據redisTemplate.opsForValue().set("name", "李四");// 讀取一條string類型數據Object name = redisTemplate.opsForValue().get("name");System.out.println("name = " + name);}
}

序列化

spring里面接受的是object對象,接受之后會用序列化器把對象序列化字節形式傳遞給底層的jedis。

改變序列化方式

序列化器的實現類有多個,我們選擇專門處理字符串的就行。

一般,如果key是字符串,我們就是用字符串序列化,值如果是對象我們就使用json序列化。

操作

@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {// 創建 TemplateRedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();// 設置連接工廠redisTemplate.setConnectionFactory(redisConnectionFactory);// 設置序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();// key 和 hashKey 采用 string 序列化redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());// value 和 hashValue 采用 JSON 序列化redisTemplate.setValueSerializer(jsonRedisSerializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);return redisTemplate;
}

這個bean需要寫在一個新的spring配置文件里面。

還需要額外引入jackson依賴,平常開發的話springmvc里面自帶了。

類地址的自動填入問題

解決辦法

@Autowired
private StringRedisTemplate stringRedisTemplate;
// JSON工具
private static final ObjectMapper mapper = new ObjectMapper();@Test
void testStringRedisTemplate() throws JsonProcessingException {// 準備對象User user = new User("虎哥", 18);// 手動序列化String json = mapper.writeValueAsString(user);// 寫入一條數據到redisstringRedisTemplate.opsForValue().set("user:200", json);// 讀取數據String val = stringRedisTemplate.opsForValue().get("user:200");// 反序列化User user1 = mapper.readValue(val, User.class);System.out.println("user1 = " + user1);
}

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

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

相關文章

LeetCode-19day:貪心算法

貪心算法經典題目總結&#xff08;C實現&#xff09; 貪心算法是一種在每一步選擇中都采取當前狀態下最優&#xff08;即最有利&#xff09;的選擇&#xff0c;從而希望導致結果是全局最優的算法。本文總結了四道經典的貪心算法問題&#xff0c;幫助你更好地理解和掌握貪心算法…

Microsoft Edge WebView2 Runtime:為應用程序提供瀏覽器核心功能

在現代軟件開發中&#xff0c;嵌入網頁內容到應用程序界面是一個常見的需求。Microsoft Edge WebView2 Runtime&#xff08;WebView2運行庫&#xff09;作為微軟操作系統WebView2控件的運行環境&#xff0c;基于Chromium內核構建&#xff0c;為應用程序提供了瀏覽器核心功能&am…

PDF文件中的相鄰頁面合并成一頁,例如將第1頁和第2頁合并,第3頁和第4頁合并

PDF頁面合并工具 這個工具可以將PDF文件中的相鄰頁面合并成一頁&#xff0c;例如將第1頁和第2頁合并&#xff0c;第3頁和第4頁合并&#xff0c;以此類推。 功能 自動檢測PDF文件中的頁面數量將相鄰的頁面合并成一頁處理奇數頁數的PDF文件&#xff08;最后一頁單獨保留&#xff…

git hub初使用問題記錄

問題一、Connection closed by UNKNOWN port 65535設置config文件為Host github.com Hostname ssh.github.com Port 443 User git問題二、ERROR: Repository not found.fatal: Could not read from remote repository.Please make sure you have the correct access rightsand …

解讀 AUTOSAR AP R24-11 Manifest 規范 —— 從部署到安全的全流程支撐

今天我們來拆解 AUTOSAR AP R24-11 版本的《Requirements on Manifest Specification》Manifest 規范要求—— 這份文檔是 Adaptive 平臺軟件 “落地運行” 的核心指南,它解決了一個關鍵問題:如何讓 AP 軟件在車載 ECU 上安全、可靠地部署和通信? 自適應平臺(AP)是啥? 是…

Linux系統 -- 多線程的控制(互斥與同步)

在多線程編程中&#xff0c;多個線程可能同時訪問臨界資源&#xff08;如共享變量、文件、硬件設備等&#xff09;&#xff0c;若缺乏控制會導致數據混亂。互斥和同步是解決該問題的核心機制&#xff0c;其中互斥鎖保證臨界資源的排他訪問&#xff0c;信號量實現線程間的有序協…

一鍵搭建開發環境:制作bash shell腳本

完整腳本&#xff1a; 1.0 #!/bin/bash set -eecho " 開始安裝 AI 開發環境&#xff08;無人交互版&#xff09; "# 檢測是否以 sudo 運行 if [ "$EUID" -eq 0 ]; thenecho "?? 警告&#xff1a;請不要使用 sudo 運行此腳本&#xff01;"echo …

mac m4執行nvm install 14.19.1報錯,安裝低版本node報錯解決

原因 由于node14使用的變異工具鏈太舊&#xff0c;無法適配最新的macOS SDK頭文件導致_studio.h報錯 解決辦法 方法1 更新nvm到最新版本 brew update nvmnvm install 14.19.1 --binary 方法2 啟用Rosetta安裝&#xff08;Intel仿真&#xff09; 1.arch -x86_64 zsh 2.nvm insta…

Codeforces Round 1043 (Div. 3) F. Rada and the Chamomile Valley

F.拉達和甘菊谷 每次測試的時間限制&#xff1a;3 秒 每次測試的內存限制512 兆字節 輸入&#xff1a;標準輸入 輸出&#xff1a;標準輸出 昨天&#xff0c;拉達發現了一個傳送門&#xff0c;可以把她傳送到洋甘菊谷&#xff0c;然后再傳送回來。拉達的快樂無以言表&#xff0c…

STM32 入門實錄:從 0 到 3 色 LED 呼吸式閃爍

一、需求 & 最終效果 硬件&#xff1a;Blue-Pill&#xff08;STM32F103C8T6&#xff09; 3 只 LED&#xff08;紅 PA0、黃 PA1、綠 PA2&#xff09;現象&#xff1a;上電后紅→黃→綠→黃→全滅&#xff0c;每步 100 ms&#xff0c;循環往復。 二、硬件連接LED 端連接說明陰…

Playwright與PyTest結合指南

Playwright與PyTest的結合&#xff0c;為Web自動化測試帶來了強大的動力。它讓你既能利用Playwright現代、跨瀏覽器的自動化能力&#xff0c;又能借助PyTest成熟測試框架的結構化、可擴展性來高效管理和組織測試用例。我會帶你了解如何將這兩者結合使用。 為了讓你快速上手&am…

plantsimulation知識點 一條軌道上多臺RGV如何引用

最近做項目有如下需求&#xff1a;軌道1上初始化生成三臺RGV&#xff0c;然后通過另一條軌道2上的傳感器代碼控制軌道1上的三臺RGV&#xff0c;之前如果另一條軌道只有一臺RGV&#xff0c;我是通過軌道2.cont來引用這臺RGV的。但是現在軌道上有了多臺RGV&#xff0c;此代碼就不…

【Canvas與盾牌】“靡不有初,鮮克有終”黃豎條盾牌

【成圖】【代碼】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>黃豎條盾牌 Draft1</title><style type"text/css"&…

使用linux+javascript+html+mysql+nodejs+npm+express等構建信息資料采集系統

一、適用場景 1、人才信息庫、檔案管理&#xff0c;構建企業或單位內部人才庫。 2、公務員/事業單位招聘&#xff0c;網上報名填寫資料、上傳證書等。 3、科研項目申報&#xff0c;課題負責人信息、成果附件、審查材料上傳。 4、志愿者招募&#xff1a;在線填寫報名信息&#…

低空經濟產業白皮書:音視頻鏈路在智能飛行體系中的核心地位

引言 低空經濟正在成為繼數字經濟、新能源產業之后的又一戰略制高點。它不僅意味著無人機物流、空中通勤、應急救援、文旅體驗等新業態的興起&#xff0c;更代表著 城市治理、智能制造、公共服務全面進入空域數字化時代。從政策引導到產業投資&#xff0c;從技術突破到應用創新…

【LeetCode 熱題 100】32. 最長有效括號——(解法二)動態規劃

Problem: 32. 最長有效括號 文章目錄整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(N)空間復雜度&#xff1a;O(N)整體思路 這段代碼同樣旨在解決 “最長有效括號” 問題&#xff0c;但它采用的是一種 動態規劃 (Dynamic Programming) 的方法。這種方法通過構建一個DP表…

使用Docker部署ZLMediaKit流媒體服務器實現gb/t28181協議的設備

最近在研究一個攝像頭&#xff0c;通信協議是 gb/t28181。對于這個協議也是第一次接觸&#xff0c;通過查閱多方資料&#xff0c;找到了兩個開源的源碼&#xff0c;來實現 視頻播放、攝像頭直播。以前也沒有深入的了解過關于視頻播放的這方面的技術&#xff0c;偶爾網站播放視頻…

硬件三人行--運算基礎篇

第3講 負反饋放大電路

【LINUX網絡】TCP原理

目錄 本文介紹 1. 什么是TCP&#xff1f; 2. TCP結構 為什么需要協議棧&#xff1a;兩臺主機通信的復雜性解決方案 3. 確認應答機制 進一步理解什么是確認和請求以及序號 進一步理解什么是序號和確認序號 并發發送帶來的問題以及解決方案&#xff08;序號&#xff09; …

Java -- 文件基礎知識--Java IO流原理--FileReader

目錄 1. 常用文件操作 2. Java IO流原理 2.1 流的分類 3. FileReader和FileWriter介紹 FileReader相關方法&#xff1a; FileWriter常用方法&#xff1a; 文件是保存數據的地方&#xff0c;比如大家經常使用的word文檔&#xff0c;txt文件&#xff0c;excel文件...都是文…